自ブックに書いたCodeより実行して
Book(1)とBook(2)をダイアログでエクセルファイルを指定
(Application.GetOpenFilename)
Book(1)とBook(2)のSheet1のデータを自ブックのActiveSheetに
名前ごとで3行単位でデータを記入していくような処理を作成しております(図参照)
こういった場合の処理で、Book(1)とBook(2)の名前の重複しないデータを作り出し、その名前単位でBook(1)とBook(2)の2つの値を覚えこませるような内部処理(変数格納)のうまい仕方について教えて頂きたいです。
Book(1)とBook(2)に記入されている名前は、種類が増えることもあれば、規則だだしく並ばないこともあります。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
No.3 です。
r.Offset(i, 1).Resize(, 6).Value = myDic(key)(i)
Next
r.Offset(2, 1).Resize(, 6).Formula = "=" & r.Offset(0, 1).Address(0, 0) & "-" & r.Offset(1, 1).Address(0, 0)
ここのResizeの『6』も今回の6列というのに関係してます。
12ヶ月なら12にして下さい。
コメント遅れましてすみませんでしたm(_ _)m
VBA難しいですね(^_^;)
やっと意図するものができました!
とても勉強になり参考になりました!ありがとうございましたm(_ _)m
No.3
- 回答日時:
取り敢えず自ブックのSheet1とSheet2にデータがあり、Sheet3に纏める方法。
ただし例題なので6ヶ月分としてます。
(r.Range("B1:G1").Value で6列分)
⇒一応ダミーで検証してみて希望通りに近いのか、確認をお薦めします。
.Range("AB1:AG1").Value
これは空白値を得るためのもので、セル番地は空白であればどこでも良いですが、
セル範囲は上のセル数に合わせて下さい。
あとはBookを選択して開いて閉じてについては、検索すれば見つかるでしょう。
そこからBook名を
Set ws(0) = Worksheets("Sheet1")
Set ws(1) = Worksheets("Sheet2")
ここで追加指定すれば行けるんじゃないでしょうかね?
Sub try()
Dim myDic As Object
Dim ws(1) As Worksheet
Dim r As Range, i As Integer
Dim key
Set myDic = CreateObject("Scripting.Dictionary")
Set ws(0) = Worksheets("Sheet1")
Set ws(1) = Worksheets("Sheet2")
For i = 0 To 1
With ws(i)
For Each r In .Range("A2", .Cells(Rows.Count, 1).End(xlUp))
If Not myDic.Exists(r.Value) Then
Select Case i
Case 0: myDic.Add r.Value, Array(r.Range("B1:G1").Value, .Range("AB1:AG1").Value)
Case 1: myDic.Add r.Value, Array(.Range("AB1:AG1").Value, r.Range("B1:G1").Value)
End Select
Else
myDic(r.Value) = Array(myDic(r.Value)(0), r.Range("B1:G1").Value)
End If
Next
End With
Next
With Worksheets("Sheet3")
.Cells.ClearContents
.Range("A1:G1").Value = ws(0).Range("A1:G1").Value
Set r = .Range("A2")
For Each key In myDic.Keys
r.Value = key
For i = 0 To 1
r.Offset(i, 1).Resize(, 6).Value = myDic(key)(i)
Next
r.Offset(2, 1).Resize(, 6).Formula = "=" & r.Offset(0, 1).Address(0, 0) & "-" & r.Offset(1, 1).Address(0, 0)
Set r = r.Offset(3)
Next
End With
Set myDic = Nothing
Set ws(0) = Nothing
Set ws(1) = Nothing
Set r = Nothing
End Sub
No.1
- 回答日時:
たぶん連想配列のDictionaryオブジェクトを使えば可能かも知れません。
が、うちのExcelは古い物ですし、特にダイアログ系は使った事ないのでコードは書けないですね。
(こちらで検証して結果をだせても、そちらで動く保証がないもので)
あとは変数格納に拘らなきゃ、まずはBook1のデータを全部3行置きに書き出し、次にBook2のデータの名前をFindメソッドで検索して該当する名前の
2行目に書き出し、且つ書き出せた(見つかった)名前には空いている列にマークを付ける。
最後にBook2のマークが付いていないデータを貼り付けていくって方法ならいけるのでは?(あくまで未検証の参考意見ですけど)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 印刷をVBAでしたい とあるフォルダに1〜5までの名前がついたbookが保存されてます このbook 2 2022/03/28 09:30
- Excel(エクセル) エクセル VBAでBook モジュールのプロシージァ(コード)に除外シートを設定したい 1 2023/01/11 15:53
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- 英語 関係代名詞の文章なのですが、 I bought a book the title of which 3 2023/05/27 19:40
- 英語 比較級(中2) 2 2022/10/18 07:02
- iPad iPadでこんな誤作動あるの? 先週の土曜日、iPadで漫画を読んでいて、次のページをめくろうとした 1 2022/10/17 23:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ActiveReportのdetailをデータ...
-
【C#】textBoxの指定行のデータ...
-
VBAでアクセスDBからデータの取...
-
「Nullの使い方が不正です」の...
-
【VB.NET】Excelの最終行までの...
-
XMLでデータとして画像を指定す...
-
wordにexcelデータの流し込み、...
-
エクセルのCSV読み込みについて
-
Excel VBA で日付を4ケタの数値...
-
VB6のMsFlexGridコントロールに...
-
Excel VBAで1週間毎にカテゴリ...
-
COBOL数値転記の仕様
-
エクセル・グラフの 横軸に値を...
-
C# DataTableに最後に追加した...
-
VBAの問題がわからないのでどな...
-
AccessVBAでのExcelメモリ解放
-
VBAコンボボックスの内容が反映...
-
Excel VBAでフォルダ内の全テキ...
-
エクセルのWEBクエリ
-
Excel VBAでグループ毎に集計す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XMLでデータとして画像を指定す...
-
【C#】textBoxの指定行のデータ...
-
VBAでアクセスDBからデータの取...
-
Excel VBAでフォルダ内の全テキ...
-
【VB.NET】Excelの最終行までの...
-
C# DataTableに最後に追加した...
-
「Nullの使い方が不正です」の...
-
VBAコンボボックスの内容が反映...
-
COBOL数値転記の仕様
-
クリスタルレポートでレコード...
-
VB2010で、選択した系列を最前...
-
アクセスでウェブ上のデータを...
-
Excel VBAで1週間毎にカテゴリ...
-
非同期のプロセス間通信(パイプ...
-
エクセルのセル最終行取得
-
ActiveReportのdetailをデータ...
-
富士通(汎用機)のAIMについて
-
Excel VBAでグループ毎に集計す...
-
エクセルのCSV読み込みについて
-
AccessVBAでのExcelメモリ解放
おすすめ情報