Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


324 / 3841 ページ ←次へ | 前へ→

【75945】Re:重複行の削除(複数列での比較)
発言  γ  - 14/8/10(日) 9:42 -

引用なし
パスワード
   フィルタの詳細設定(いわゆるフィルタオプションと呼ばれるもの)を
利用するのが簡便です。

・見出し行を追加します。
・見出しを含むすべての範囲を選択して、
・リスト範囲が、全範囲になっていることを確認し、
・検索条件範囲は未入力のままでOK
・「重複するレコードは無視する」にチェックをつけます。
これで「詳細設定」を実行すると、お望みのものだけが表示状態になります。

それを別のシートにコピーペイストすればよろしいかと思います。
今の表で、不要な行を削除したければ、
・コピーペイストしたあと全範囲を消去し、
・別シートの内容を元に戻す
とよいでしょう。

手作業でもいいですが、マクロにしたいのであれば、
これをマクロ記録して、少し修正すれば完了です。
・ツリー全体表示

【75944】重複行の削除(複数列での比較)
質問  こなつ  - 14/8/10(日) 9:26 -

引用なし
パスワード
   こんにちは
いつもお世話になっています。

過去のログも拝見させて頂きましたが
少し出来ないところがあるので質問させて頂きました。
宜しくお願いします。

質問は
Sheet1にある複数列に渡って記入してある
データをそれぞれ比較して同じものがあったら
削除して重複の無いデータシートにする
方法をご教授頂きたいと思います。

データイメージ
   A列  B列  C列   D列  E列  F列・・・・
1  3/3  101 りんご  3kg  田中  10
2  3/3  101 りんご  2kg  鈴木  10
3  3/3  101 りんご  3kg  小林  10
4  3/4  101 みかん  1kg  今井  20 ←1.
5  3/4  101 みかん  2kg  田中  5 
6  3/4  101 みかん  2kg  鈴木  10
7  3/4  101 みかん  1kg  今井  20 ←1.
8  3/5  103 バナナ  2kg  高橋  3  ←2. 
9  3/5  103 バナナ  3kg  鈴木  15
10  3/5  103 バナナ  1kg  小林  26
11  3/5  103 バナナ  2kg  高橋  3  ←2.

 ※この場合 1.と2.の行が重複として判断したいのです。 
 ※実際のデータは、A〜AC列 × 10000行位のデータになります。

こういったデータで完全に重複している行を削除したいのです。
1列のデータで重複削除は出来るのですが、複数列で
完全重複を探す方法が判らなくて質問させて頂きました。

みなさん 助けて下さい。
お願いします。
・ツリー全体表示

【75943】Re:フォルダ内での処理につきまして
発言  γ  - 14/8/9(土) 17:52 -

引用なし
パスワード
   >すみません。できればE列以降の場所を変更したくないので
>この動作の後にD列〜F列を削除したいのですが、
>お教えいただけますでしょうか。

ところで、
これは、ABC列にテキストファイルを挿入したことで、
もともとのABC列が右にずれているということですか?
私のところではそうはならないですが。
何らかの設定によって、そうなることがあるのでしょうか。
事実を確認したいですね。
・ツリー全体表示

【75942】Re:フォルダ内での処理につきまして
発言  γ  - 14/8/8(金) 21:02 -

引用なし
パスワード
   こんにちは。

二つの意味で疑問があります。

(1)ひとつは、内容の点。
> ベースシートのE列以降に関数を入れてありまして、
> 速度の計算を同じように揃えたいのが目的です。
という発言と、
> できればE列以降の場所を変更したくないので
> この動作の後にD列〜F列を削除したいのですが
と言う発言の関係はどうなるのですか?
E列に入っている関数は削除していいのですか?

(2)もうひとつは、リクエストすれば回答が得られる、
と勘違いしていませんか?という点。

削除なのか、消去なのか知りませんが、
それはご自分では書けないのですか?
その動作をマクロ記録して、
ただ、シートをwsで特定するだけだと思いますが。

私の提示したコードが理解できないようでしたら、
ステップ実行しながら、どんな動作をするか、
途中で変数はどのように変わるか、を調べて見て下さい。

結果を検証するだけでなく、内容を理解してください。
また、今回の追加の仕様をご自分で考える事は、
理解を進める絶好の材料だと思います。
・ツリー全体表示

【75941】Re:ファイルがある場合のみハイパーリン...
お礼  ごん太  - 14/8/8(金) 16:26 -

引用なし
パスワード
   ▼カリーニン さん 回答ありがとうございます。

Dir関数でうまくいきました。
・ツリー全体表示

【75940】Re:ファイルがある場合のみハイパーリン...
発言  カリーニン  - 14/8/8(金) 16:01 -

引用なし
パスワード
   Dir関数
で検索してみてください。
・ツリー全体表示

【75939】ファイルがある場合のみハイパーリンクを...
質問  ごん太  - 14/8/8(金) 15:03 -

引用なし
パスワード
   Dドライブにファイルがあります。
ファイル名は、1.txt、2.txt、3.txt、5.txtとなっています。
4.txtはありません。

一方A列にファイル名が書かれています。
1.txt
2.txt
3.txt
4.txt
5.txt

このA列のファイル名にハイパーリンクを貼って、Dドライブのファイルが開けるようにしたいです。

この時、4.txtにはハイパーリンクが設定されないようにしたいのですが、お分かりの方、コードを教えて頂けますようお願いします。
・ツリー全体表示

【75938】Re:条件分岐について
発言  独覚  - 14/8/8(金) 11:30 -

引用なし
パスワード
   下記で解決済みのようです。
ht tp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14133318704
・ツリー全体表示

【75937】Re:フォルダ内での処理につきまして
質問  マリモ  - 14/8/8(金) 11:06 -

引用なし
パスワード
   ▼γ さん:
ありがとうございます。
動作確認が出来ました。

すみません。できればE列以降の場所を変更したくないので
この動作の後にD列〜F列を削除したいのですが、
お教えいただけますでしょうか。

よろしくお願いいたします。
・ツリー全体表示

【75936】Re:グラフに貼り付けたテキストボックスの移動
お礼  ごん太  - 14/8/8(金) 10:34 -

引用なし
パスワード
   ▼kanabun さん 回答ありがとうございます。

アクティブなテキストボックスを操作することは以下で出来そうです。

Sub Try1()
  Dim objCht As ChartObject
  Dim W#
  
  Set objCht = ActiveSheet.ChartObjects(1)
  With objCht
    W = .Width 'グラフの横幅
    With Selection '.Chart.TextBoxes(1) ← 修正
      .Left = W - .Width
      .Top = 0
    End With
  End With
End Sub
・ツリー全体表示

【75935】Re:グラフに貼り付けたテキストボックスの移動
発言  kanabun  - 14/8/8(金) 9:04 -

引用なし
パスワード
   ▼ごん太 さん:

選択されているTextBoxだけが
というのは、ぼくにはちょっと分かりませんので、もうすこし簡単なのを。
以下は、ActiveSheetの1番目の埋め込みグラフ ChartObjects(1) のなかに
ある1番目のテキストボックス ChartObjects(1).Chart.TextBoxes(1)
を、右上に移動するコードです。

Sub Try1()
  Dim objCht As ChartObject
  Dim W#
  
  Set objCht = ActiveSheet.ChartObjects(1)
  With objCht
    W = .Width 'グラフの横幅
    With .Chart.TextBoxes(1)
      .Left = W - .Width
      .Top = 0
    End With
  End With
End Sub
・ツリー全体表示

【75934】グラフに貼り付けたテキストボックスの移動
質問  ごん太  - 14/8/8(金) 7:27 -

引用なし
パスワード
   office2010です。

グラフをアクティブにして、テキストボックスを貼り付けました。
テキストボックスは、グラフの左上に貼りつきました。

今、貼りつけたテキストボックスはアクティブな状態になっています。
この状態で、マクロを実行するとアクティブになっているテキストボックスだけが、グラフの右上に移動するようにしたいのです。

お分かりの方、コードを教えてください。お願いいたします。
・ツリー全体表示

【75933】Re:フォルダ内での処理につきまして
発言  γ  - 14/8/7(木) 21:30 -

引用なし
パスワード
   ・「外部データの取り込み」 - 「テキストファイル」を利用してみました。
・読み込む列の数は3つと仮定しました。

前提の違うところがあれば、テキトーに修正してください。
あくまでも参考コードということで、読み解いてみてください。

Sub test()
  Const folderName As String = "D:\MyDocuments\201408\test\"
                 '■修正してください。尻尾の\に注意
  Dim ws As Worksheet
  Dim rng As Range
  Dim lastRow As Long
  Dim k As Long

  For k = 1 To 2 '■ファイルはテスト的に1.txt から 2.txtまでとしています。
    Sheets("ベースシート").Copy After:=Sheets(Sheets.Count)
    Set ws = ActiveSheet
    ws.Name = CStr(k)

    ' テキストファイルをA2の位置に読み込む
    With ws.QueryTables.Add(Connection:= _
      "TEXT;" & folderName & CStr(k) & ".txt", _
       Destination:=ws.Range("$A$2"))

      .Name = CStr(k)
      .FieldNames = True
      .RowNumbers = False
      .FillAdjacentFormulas = False
      .PreserveFormatting = True
      .RefreshOnFileOpen = False
      .RefreshStyle = xlInsertDeleteCells
      .SavePassword = False
      .SaveData = True
      .AdjustColumnWidth = True
      .RefreshPeriod = 0
      .TextFilePromptOnRefresh = False
      .TextFilePlatform = 932
      .TextFileStartRow = 1
      .TextFileParseType = xlDelimited
      .TextFileTextQualifier = xlTextQualifierDoubleQuote
      .TextFileConsecutiveDelimiter = True
      .TextFileTabDelimiter = True
      .TextFileSemicolonDelimiter = False
      .TextFileCommaDelimiter = False
      .TextFileSpaceDelimiter = True
      .TextFileColumnDataTypes = Array(1, 1, 1)
      .TextFileTrailingMinusNumbers = True
      .Refresh BackgroundQuery:=False
    End With

    'A2からC列の最終行までを対象に、C列で昇順にソート
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    Set rng = ws.Range("A2", ws.Cells(lastRow, 3))

    With ws.Sort
      .SortFields.Clear
      .SortFields.Add Key:=Range("C2"), SortOn:=xlSortOnValues, _
              Order:=xlAscending, DataOption:=xlSortNormal
      .SetRange rng
      .Header = xlGuess
      .MatchCase = False
      .Orientation = xlTopToBottom
      .SortMethod = xlPinYin
      .Apply
    End With
  Next
End Sub
・ツリー全体表示

【75932】Re:条件分岐について
発言  独覚  - 14/8/7(木) 15:10 -

引用なし
パスワード
   VBA質問箱基本ポリシー内の「マルチポストについて」からです。

>別のサイト(掲示板)にまったく同じ目的の投稿をすることを、一般に「マルチポスト」といいます。
>当質問箱では、マルチポストは原則認めています。
>つまり、ほかのサイトで質問したことをこのサイトで質問してもかまわないということです。

>しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」ということを宣言してください。
>そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。
>質問しっぱなし、というのはモラルに反します。
>「解決したからいいや」というのではありません。

>また、マルチポストを明示的に禁止しているサイトとのマルチポストをしてはいけません。

上記の指示に従いましょう。
・ツリー全体表示

【75931】条件分岐について
質問  アステア  - 14/8/7(木) 14:39 -

引用なし
パスワード
   Excelのマクロ(VBA)について質問させてください。

特定の文字列がある場合に、リストの一番下にくるようにしたいですが、どうすれば良いかわかりません。

ちなみにリストの文字は別のシートの文字が入るようにリンクしています。
つまりそのシートに特定の文字がある場合に、それをリストから除外したいのです。

条件分岐?の式があるみたいなのですが、具体的にコードを書けばよいのかわかりません、

状況を説明する画像を添付させていただきます。

具体的なコード、または、参考サイト等、教えてください。どなたかよろしくお願いします。
・ツリー全体表示

【75930】Re:フォルダ内での処理につきまして
発言  マリモ  - 14/8/7(木) 9:37 -

引用なし
パスワード
   ▼γ さん:
>記録コードの提供ありがとうございます。
>
>その前にいくつか確認したいことがあります。
>
>実行したいことは、以下のようなことで良いのですか。
>1. 新たなBOOKを作成し、その名称を、TXTファイルの入っているフォルダの名称とする。
>2. フォルダ中のテキストファイルの数だけ、以下の3〜6を繰り返す。
> 3.「分析」ブックの中の「ベースシート」を元にしてシートを増幅する。
> 4. テキストファイルを開いて、その内容を、3.のシートのA2以下の位置に値貼り付けする。
> 5. A列に読み込まれた文字列を、スペースを区切り文字として、各列に分離する。
> 6. 1行目を見出しとし、A:C列の範囲を、C列をソートキーとして昇順でソートする
>7. Bookを保存する。

はい。上記の通りでございます。

>-----------
>(Q1) テキストファイルの拡張子は何ですか?
拡張子はTXTで、メモ帳で開きます。

>(Q2) ナンバリングはどのようにされていますか?
>   例1: 共通文字列 + 3桁の数字(001,002,003・・・)
>   例2: 共通文字列 + 数字(1,2,3,・・,10,11,・・・)
例2の通り、1.TXT、2.TXT、3.TXTとなっております。

>(Q3)ベースシートを使う意図はなにですか?
>  単に、一行目の見出しを揃えたい?
>  それとも、シートの各種書式をそれで統一したいということ?)
ベースシートのE列以降に関数を入れてありまして、
速度の計算を同じように揃えたいのが目的です。


説明不足で申し訳ありませんでした。
よろしくお願いいたします。
・ツリー全体表示

【75929】Re:フォルダ内での処理につきまして
発言  γ  - 14/8/6(水) 21:01 -

引用なし
パスワード
   記録コードの提供ありがとうございます。

その前にいくつか確認したいことがあります。

実行したいことは、以下のようなことで良いのですか。
1. 新たなBOOKを作成し、その名称を、TXTファイルの入っているフォルダの名称とする。
2. フォルダ中のテキストファイルの数だけ、以下の3〜6を繰り返す。
 3.「分析」ブックの中の「ベースシート」を元にしてシートを増幅する。
 4. テキストファイルを開いて、その内容を、3.のシートのA2以下の位置に値貼り付けする。
 5. A列に読み込まれた文字列を、スペースを区切り文字として、各列に分離する。
 6. 1行目を見出しとし、A:C列の範囲を、C列をソートキーとして昇順でソートする
7. Bookを保存する。
-----------
(Q1) テキストファイルの拡張子は何ですか?
(Q2) ナンバリングはどのようにされていますか?
   例1: 共通文字列 + 3桁の数字(001,002,003・・・)
   例2: 共通文字列 + 数字(1,2,3,・・,10,11,・・・)
(Q3)ベースシートを使う意図はなにですか?
  単に、一行目の見出しを揃えたい?
  それとも、シートの各種書式をそれで統一したいということ?)
・ツリー全体表示

【75928】Re:フォルダ内での処理につきまして
発言  マリモ  - 14/8/6(水) 12:02 -

引用なし
パスワード
   ▼γ さん:
>▼マリモ さん:
>>マクロの記録を使いましたが、なかなか思うように出来ませんでした。
>まず、そのマクロ記録の結果を示してください。

失礼いたしました。

【記録そのままの状態】
Sub test1()
'
' test1 Macro
'

'
  Sheets("ベースシート").Select
  Sheets("ベースシート").Copy Before:=Sheets(1)
  Sheets("ベースシート (2)").Select
  Sheets("ベースシート (2)").Name = "1"
  Range("A2").Select
  ActiveSheet.Paste
  Selection.TextToColumns Destination:=Range("A2"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
    :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
  Range(Selection, Selection.End(xlToRight)).Select
  ActiveWorkbook.Worksheets("1").Sort.SortFields.Clear
  ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("C2:C59"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  With ActiveWorkbook.Worksheets("1").Sort
    .SetRange Range("A2:C59")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
  End With
  Sheets("ベースシート").Select
  Sheets("ベースシート").Copy Before:=Sheets(1)
  Range("A2").Select
  ActiveSheet.Paste
  ActiveWorkbook.Worksheets("ベースシート (2)").Sort.SortFields.Clear
  ActiveWorkbook.Worksheets("ベースシート (2)").Sort.SortFields.Add Key:=Range( _
    "C2:C99"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
  With ActiveWorkbook.Worksheets("ベースシート (2)").Sort
    .SetRange Range("A2:C99")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
  End With
  Sheets("ベースシート (2)").Select
  Sheets("ベースシート (2)").Name = "2"
  ActiveWorkbook.Save
  ActiveWindow.Close
  Sheets("ベースシート").Select
  Sheets("ベースシート").Copy Before:=Sheets(1)
  Sheets("ベースシート (2)").Select
  Sheets("ベースシート (2)").Name = "1"
  Range("A2").Select
  ActiveSheet.Paste
  ActiveWorkbook.Worksheets("1").Sort.SortFields.Clear
  ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("C2:C91"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  With ActiveWorkbook.Worksheets("1").Sort
    .SetRange Range("A2:C91")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
  End With
  Sheets("ベースシート").Select
  Sheets("ベースシート").Copy Before:=Sheets(1)
  Sheets("ベースシート (2)").Select
  Sheets("ベースシート (2)").Name = "2"
  Range("A2").Select
  ActiveSheet.Paste
  ActiveWorkbook.Worksheets("2").Sort.SortFields.Clear
  ActiveWorkbook.Worksheets("2").Sort.SortFields.Add Key:=Range("C2:C65"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  With ActiveWorkbook.Worksheets("2").Sort
    .SetRange Range("A2:C65")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
  End With
  ActiveWorkbook.Save
  ActiveWindow.Close
End Sub

記録したまま実行をかけるとまず
Sheets("ベースシート").Select
ここでデバック表示が出てしまいました。

【こんな感じで始めるのかなと思っている部分】
  Dim srcFName
  Dim orgBook As Worksheet
  Dim orgSheet As Worksheet
  Dim bookPath As String
  Dim r As Range
  
  srcFName=Application GetOpenFilename("ベースシートBook,分析xlsx)
  If VarType(srcFName) = vbBoolean Then Exit Sub
  Set orgBook=Workbooks Open(srcFName)


ここではOpenのところがコンパイルエラーでステートメントの最後と表示されました。

よろしくお願いいたします。
・ツリー全体表示

【75927】Re:『F列とP列に同じ名前がある場合、...
発言  マナ  - 14/8/5(火) 21:36 -

引用なし
パスワード
   修正版です。コードの意味は自分で調べて下さい。

Sub test()
  Dim 社員リスト As Range
  Dim 出勤者リスト As Range
  Dim c As Range
  Dim r
  
  Set 社員リスト = Range("P2", Range("P" & Rows.Count).End(xlUp))
  Set 出勤者リスト = Range("F2", Range("F" & Rows.Count).End(xlUp))
  
  社員リスト.Offset(, 1).Resize(, 2).ClearContents
  
  For Each c In 出勤者リスト
    r = Application.Match(c, 社員リスト, 0)
    If IsNumeric(r) Then
      社員リスト(r).Offset(, 1).Resize(, 2).Value = c.Offset(, 1).Resize(, 2).Value
    End If
  Next
  
End Sub
・ツリー全体表示

【75926】Re:『F列とP列に同じ名前がある場合、...
発言  マルチネス  - 14/8/5(火) 21:06 -

引用なし
パスワード
   あちらもこちらもマルチポストは禁止されていない。あくまでも「回答者」への参考として
リンクしたまでである。
・ツリー全体表示

324 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free