ExcelのVBAで別ブックの2つのシートから条件が一致したデータを自動的に転記さるコードを、以前こちらで教えていただいたものですが、またまた、お力をお借りできれば幸いです。
ファイルの情報としては以下です。
book1(転記先)
book2(元データ)sheet1 sheet2
book1
A列 にはID番号
B列には名前
C列はフリガナ
D列には性別
E列には年齢
book2
sheet1.2ともに
A列 にはコース名
B列にはID番号
C列は名前
D列にはフリガナ
E列には年齢
F列には性別
が更に大きいくくりの参加コースごとにシート分けされてる状態です。
また、book2の2つのシートの並びは同じです。
book1内のマクロ実行でbook2のC列名前、
D列フリガナ、E列年齢、F列性別を同時にbook1の該当項目の欄に自動更新で転記させたいです。
条件としては「ID番号が一致した場合」です。
なお、book1のID番号がbook2にない場合はそのままbook1のC列は空白表示で出来たらと思ってます。
どうかよろしくお願いします。
No.2ベストアンサー
- 回答日時:
>更にbook2のリスト内にないIDの場合、直接入力で情報を、入れたりするのですが、教えていただいたものを実行すると、当たり前なのですが情報が、消えて空白に、なってしまいます、、、。
>そこを空白に、せず残しておく方法はありますか?
以下の箇所をコメントにしてください
----------------------------------------------------------------
sh.Cells(row, "B").Value = "" 'Book1のB列を空白設定
sh.Cells(row, "C").Value = "" 'Book1のC列を空白設定
sh.Cells(row, "D").Value = "" 'Book1のC列を空白設定
sh.Cells(row, "E").Value = "" 'Book1のC列を空白設定
---------------------------------------------------------------
コメントにするには先頭に'を付けます。そうすると以下のようになります。
' sh.Cells(row, "B").Value = "" 'Book1のB列を空白設定
' sh.Cells(row, "C").Value = "" 'Book1のC列を空白設定
' sh.Cells(row, "D").Value = "" 'Book1のC列を空白設定
' sh.Cells(row, "E").Value = "" 'Book1のC列を空白設定
出来ました!本当にありがとうございます!色々、ネットや本などで調べてたのですが、なかなか別シートを扱うものが少なく困ってましたが無事解決出来ました。
2度も教えてくださり本当にありがとうございました!
No.1
- 回答日時:
前回回答者です。
前回のは使えませんので破棄してください。
以下のマクロを標準モジュールに登録してください。
Const SrcBook As String = "book2.xlsx" '元データのブック名
Const Folder As String = "d:\goo\excel" '元データを格納するフォルダ名
はあなたの環境に合わせて適切に設定して下さい。
前回はIDに対応する1つの項目のみの設定でしたが、今回は複数項目なので
IDに対応するBook2のシート名と行番号を記憶し、そのデータに基づき、Book1を設定します。
----------------------------------------------------
Option Explicit
Const SrcBook As String = "book2.xlsx" '元データのブック名
Const Folder As String = "d:\goo\excel" '元データを格納するフォルダ名
Public Sub 自動転記()
Dim dict As Object
Dim maxrow As Long
Dim row As Long
Dim key As Variant
Dim sh As Worksheet
Dim vals As Variant
Dim sname As String
Dim row2 As Long
Set dict = CreateObject("Scripting.Dictionary") ' 連想配列の定義
Workbooks.Open Filename:=Folder & "\" & SrcBook
Call GetIDs("sheet1", dict)
Call GetIDs("sheet2", dict)
ThisWorkbook.Activate
Set sh = Worksheets("sheet1") 'Book1のSheet1(以下Sheet1を使用)
maxrow = sh.Cells((Rows.Count), "A").End(xlUp).row 'Book1のA列最終行
For row = 2 To maxrow
key = sh.Cells(row, "A").Value 'Book1のA列(ID)
If dict.exists(key) = True Then
vals = Split(dict(key), "|") 'シート名(vals(0)と行番号(vals(1)を"|"で分割して取得する
sname = vals(0)
row2 = vals(1)
sh.Cells(row, "B").Value = Workbooks(SrcBook).Worksheets(sname).Cells(row2, "C").Value 'Book1のB列設定
sh.Cells(row, "C").Value = Workbooks(SrcBook).Worksheets(sname).Cells(row2, "D").Value 'Book1のC列設定
sh.Cells(row, "D").Value = Workbooks(SrcBook).Worksheets(sname).Cells(row2, "E").Value 'Book1のD列設定
sh.Cells(row, "E").Value = Workbooks(SrcBook).Worksheets(sname).Cells(row2, "F").Value 'Book1のE列設定
Else
sh.Cells(row, "B").Value = "" 'Book1のB列を空白設定
sh.Cells(row, "C").Value = "" 'Book1のC列を空白設定
sh.Cells(row, "D").Value = "" 'Book1のC列を空白設定
sh.Cells(row, "E").Value = "" 'Book1のC列を空白設定
End If
Next
Workbooks(SrcBook).Close
MsgBox ("完了")
End Sub
Private Sub GetIDs(ByVal sname As String, ByVal dict As Object)
Dim maxrow As Long
Dim row As Long
Dim key As Variant
Dim sh As Worksheet
Set sh = Worksheets(sname)
maxrow = sh.Cells((Rows.Count), "B").End(xlUp).row 'Book2のB列(ID)(Sheet1,Sheet2共通)
For row = 2 To maxrow
key = sh.Cells(row, "B").Value 'Book2のB列(ID)(Sheet1,Sheet2共通)
dict(key) = sname & "|" & row 'Book2のシート名と行番号を記憶する("|"で区切る)
Next
End Sub
前回、今回と2度も教え下さりありがとうございます!説明もつけていただき、とてもわかりやすく、助かりました!
無事、作成出来ました!
後、本当に厚かましいのですが、更にbook2のリスト内にないIDの場合、直接入力で情報を、入れたりするのですが、教えていただいたものを実行すると、当たり前なのですが情報が、消えて空白に、なってしまいます、、、。そこを空白に、せず残しておく方法はありますか?
もし、よければ教えていただきたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Excel(エクセル) Excelの列から検索して該当する行を別シートに転記するVBA 2 2022/12/20 09:35
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
エクセルで最初のスペースまで...
-
PowerPointで表の1つの列だけ...
-
エクセル 文字数 多い順 並...
-
2つのエクセルのデータを同じよ...
-
エクセルの表から正の数、負の...
-
VBAで文字列を数値に変換したい
-
エクセル 同じ値を探して隣の...
-
エクセルで文字が混じった数字...
-
Excelで半角の文字を含むセルを...
-
Excel、市から登録している住所...
-
「B列が日曜の場合」C列に/...
-
オートフィルターをかけ、#N/A...
-
Excelの行、列の左方向シフト、...
-
エクセルの表示画面(シート)...
-
【VBA】特定列に文字が入ってい...
-
EXCELで 一桁の数値を二桁に
-
VBAでセル入力の数式に変数を用...
-
エクセルの項目軸を左寄せにしたい
-
エクセル(勝手に太字になる)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
2つのエクセルのデータを同じよ...
-
エクセルで最初のスペースまで...
-
エクセルVBA、別ブックへ転記す...
-
エクセル 文字数 多い順 並...
-
エクセル(勝手に太字になる)
-
VBAで文字列を数値に変換したい
-
エクセルで文字が混じった数字...
-
エクセルの表から正の数、負の...
-
「B列が日曜の場合」C列に/...
-
Excelで半角の文字を含むセルを...
-
エクセルの並び変えで、空白セ...
-
Excel、市から登録している住所...
-
エクセル 同じ値を探して隣の...
-
EXCELで 一桁の数値を二桁に
-
エクセル初心者です 関数の入れ...
-
A列がない・・・A列が非表示に...
-
オートフィルターをかけ、#N/A...
-
エクセルで、列の空欄に隣の列...
おすすめ情報