- ベストアンサー
条件つきでVLOOKUP的操作を実行するマクロ
- 「データー」と「閲覧」のシートで、特定の条件に一致する行の値をコピーするマクロを作成したいです。
- 「閲覧」シートのC55の値と「データー」シートのA列の値が一致する場合、該当行のH,I,J,K列の値を「閲覧」の57行目のA,C,E,K列にコピーします。
- しかし、「閲覧」のC55と一致するケースが0または最大20個まで存在するため、該当データを貼り付けた後、次の行に同じ操作を繰り返す必要があります。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- エクセルマクロで条件に該当する数値を探す
エクセル初心者です。 シート1のA1~A18に1~18の数値がランダムに入っています。(重複した値は無し) シート2の3行目C3~T3にも1~18の数値がランダムに入っています。(空欄あり、重複した数値は無し) シート2の2行目C2~T2までは左から順に1~18の数値が入っています。(順位表示) 以上の条件下で下記の作業をマクロで実行させる式を教えてください。 シート1のA1~A18の値と同じ値を、 シート2の3行目C3~T3の中からどのセル(列)に入っているかを確認して、さらに該当する列の2行目C2~T2の値を、シート3の1行目A1~R1に表示させる。 例:シート1のA1=3、A2=2、A3=1の時、 シート2のC3=3、D3=1、E3=2でした。 シート2のC2=1、D2=2、E2=3です(この行の数値は毎回同じ) 上記の時シート3にはA1=1、B1=3、C1=2となります。 *シート1のA列A1~A18とシート3の1行目A1~R1の位置関係はリンクしています。(列→行) シート1 A列 1 3 2 シート2 A列 B列 C列 D列 E列 2行見出し見出し1 2 3 3行見出し見出し3 1 2 シート3 A列 B列 C列 2 1 3 ご理解頂けたでしょうか? 初心者ですので分かりやすい回答を宜しくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- マクロでvlookup
マクロでvlookupを使用したいのですが、 動かした結果が #N/A になります。 どこが間違っているのでしょうか? マクロはこれ Sub macro1() Worksheets("訪問予定").Select Cells(3, 2).Value = Application.VLookup(Cells(1, 2).Value, Worksheets("担当").Range("A1:C5"), 2) End Sub 日本語で次のように私は認識してます。 「サブマクロ 訪問予定シートを選択 3行2列目の値は担当シートの日付と一致する行の2列目の値 エンドサブ」 やりたいことは 担当シートをもとに 訪問予定シートの担当蘭を埋めることです。 上記のマクロでは ループさせてないので 一か所しか埋められませんが ループを使ってひと月の担当予定を埋める方法を考えてます。
- ベストアンサー
- Excel(エクセル)
- エクセルマクロでVLOOKUPのよう列を貼る
初めましてよろしくお願いします。 シート2に A B ・・・・・・・・・ Z 1 900 5 5 ・ 903 40 60 ・ ・ ・ ・ 300 220 1 ・・・ 100 301 210 10 ・・・ 1000 302 200 15 ・・・ 20 ・ ・ ・ が有ります。シート1のE10に210と入力されている場合、マクロを実行するとA列を検索し、シート2のA301の値と一致する301行をシート1のE11から列に変換しコピーされるようにしたいと思います。 シート1結果 A B C D E 1 2 ・ ・ 10 210 11 10 ・ ・ ・ ・ 35 1000 解る方、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- マクロVLOOKUPの高速化
シート1には13,000行、 シート区分マスターには25,000行において シート1の検索値からシート区分マスターを検索して ヒットしたらシート1に返したいです。 シート1のデータ行文行いたいです。 シート1の行数は常に変化、 シート区分マスターの行数は固定です。 以下の記述で検索を行いますが終了するのに 5分強かかります。 (下のほうに再計算0%→5%→70%→95%と表示されている) もっと早く処理させる方法はありますでしょうか? よろしくお願いします。 Sub 区分検索() '2010 年11月18日 'シート1のA列を検索値として 'シート区分マスターのA列を検索しヒットしたら 'シート区分マスターの該当行のE列をシート1のC列に転記 'データはそれぞれのシートともに2列目からである 'ヒットしない場合はシート1のC列は空白にする '検索値と転記するセルのシート選択 With Sheets("シート1") 'データ開始行のC2に式を入れる .Range("C2").Formula = _ "=IF(ISNA(VLOOKUP(A2,区分マスター!$A:$E,5,FALSE)),"""",VLOOKUP(A2,区分マスター!$A:$E,5,FALSE))" '数式入力 '式によって抽出されてC列に転記された値をコピーします。 .Range("C2").Copy .Range("C2:C" & .Range("A" & .Rows.Count).End(xlUp).Row) 'データ最終行までコピー .Columns("C:C").Copy 'コピーした値をC1から値貼付を行う .Range("C1").PasteSpecial Paste:=xlPasteValues 'C列を値に変換 Application.CutCopyMode = False End With End Sub
- ベストアンサー
- オフィス系ソフト
- VLOOKUPのような操作ができるマクロ
VLOOKUPのような操作を マクロで行いたいのですが、 その組み方を教えていただけませんでしょうか。 下表のように 入力作業を行うシート「sheet作業」(シート数は10あります)と データが入力されているシート「sheetデータ」があり、 「sheet作業1」(~「sheet作業10」)のセルにNo.を入力すると、 「sheetデータ」のNo.列を参照して、 同じ番号の、"姓"から"点数"までのデータをコピーして、 「sheet作業」の、"姓"から"点数"までのセルに、 値のペーストで貼り付ける というような形でマクロを組みたいのですが、 どのように組めばよろしいでしょうか? ------------------------------------------------- 「sheetデータ」 No. 姓 名 点数 101 あい うえ 10 102 かき くけ 20 103 さし すせ 25 104 たち つて 30 105 なに ぬね 45 ------------------------------------------------- 「sheet作業1」 No. 姓 名 点数 102 (かき) (くけ) (20) ↑ (No.を入力してマクロを実行すると、 "姓"から"点数"までのデータがペーストされる。) 「sheet作業2」 No. 姓 名 点数 105 (なに) (ぬね) (45) ------------------------------------------------- 分かりづらい文章ですみません。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- vlookupを使ったマクロの書き方
マクロ中で、VLOOKUPを使用して、下記②のExcelファイルの職員番号と、下記①の職員番号が一致していて、①のD列にメールアドレスが入ってない場合のみ、②のファイルのメールアドレスを、①のD列へ挿入したいのですが、マクロの書き方がわかりません、何方かご教示頂けましたら、大変助かります。 ①ファイル名=F:\11_データ\課題参画者リストまとめ\2024参画者リストまとめ_20240311.xlsx シート名=参画者リスト 職員番号=B列2行目以降 メールアドレス=D列の2行目以降 シートのA列~H列に値が入っていますが、メールアドレスのセルは、記載無し、記載有りのセルがあります。 ②ファイル名=F:\12_データ\課題参画者リストまとめ\職員マスタ.xlsx シート名=職員マスタ420227 職員番号=A列2行目以降 メールアドレス=C列2行目以降 シートのA列~C列は値が入っています。 ※①のファイルは、データ連結マクロで複数のファイルを纏めたExcelファイルになります。 タイムスケジューラで自動で起動させる為、vbsファイル中に、マクロファイルを設定させて、 バッチファイルでこのvbsファイルを起動して作成しております。 2024年度-参画者リスト作成.vbsの中身は以下の通りで、このファイルをバッチファイルに設定して使っております。 Dim WB_PATH Const PROC_NAME = "参画者リストおまとめ" Dim excelApp Set excelApp = CreateObject("Excel.Application") WB_PATH = "C:\Users\watan\Documents\27_EXCEL教習\TEST\11_2024-課題参画者リスト\スクリプト\【自動起動】課題参画者リストまとめシートv4.xlsm" With excelApp .Visible = False Dim wb Set wb = .Workbooks.Open(WB_PATH) .Run "'" & wb.Name & "'!" & PROC_NAME .DisplayAlerts = False wb.Save wb.Close End With excelApp.Quit Set excelApp= Nothing
- ベストアンサー
- Visual Basic
- マクロでVLookupが出来ません。
マクロでVLookupが出来ません。 A列からE列までデータがあるシート1のA,B,C列の値が全て一致する シート2の行削除をしたいです。 2000行中500行残るはずのダミーで実験してますが全行削除されてしまいます。 Do Until Cells(Line, 6).Value →6の部分を1 VLookup(Cells(Line, 6) →6の部分を1にすれば 500行残ります。ですがこれでは検索値がA列のみの値です。 またそれぞれ1→2、1→3、1→4にしても同じく全行消えこんがらがってます。 シート1のA列のみ検索しているような動きです。どこを修正すればいいのでしょうか? Sub 行削除() 'シート1→8月シート2→9月 Sheets("8月").Select Range("F2").Select ActiveCell.FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]" Selection.AutoFill Destination:=Range("F2:F10000") Sheets("9月").Select Range("F2").Select ActiveCell.FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]" Selection.AutoFill Destination:=Range("F2:F10000") '検索する対象値があるシート選択 Sheets("9月").Select 'そのシートの検索開始の行数を選択2行目。 Line = 2 'そのシートの検索値の列指定6=F列。セルF2の値が検索したい値。 'その値がなくなったら検索を終了させる.Value = ""を追加。 Do Until Cells(Line, 6).Value = "" 'エラーとなっても次に進む On Error Resume Next '検索結果を記入する列を指定。Line7=G列(※1) '検索する値があるシートとその列を指定 'VLookup(Cells(Line, 6)の部分。6=F列 '検索されるシートと検索範囲を指定 'Worksheets("9月").Range("A2:F10000")→セルA2からセルF10000まで '検索されたらその行のどの列の値を結果とするのか指定 1=A列 '検索方法指定0=FALSE完全一致。 Cells(Line, 7).Value = Application.WorksheetFunction.VLookup(Cells(Line, 6)_ .Value, Worksheets("8月").Range("A2:F10000"), 1, 0) 'VLOOKUP関数が終了又はエラーが発生したら止まる On Error GoTo 0 '検索されなかったときの処理 '上記(※1)の部分Line7=G列に値がない If Cells(Line, 7).Value = "" Then 'Line7=M列に無と表示 Cells(Line, 7).Value = "無" End If '2行目から開始なので次の行の値を検索値とする Line = Line + 1 '検索する値がなくなるまで繰返す Loop '1行目が削除されるのを防止セルG1に無とセット Sheets("9月").Select Range("G1").Select ActiveCell.FormulaR1C1 = "無" 'データの最終行の行番号を保持する変数 Dim RwMax As Long '現在処理中の行番号を保持する変数 Dim Rw As Long '対象となるシートを選択。 Worksheets("9月").Select 'データの最終行の行番号を取得。 'Count, 7=G列 においてデータが入っている一番下のセルの行番号 RwMax = Cells(Rows.Count, 7).End(xlUp).Row '最終行から1行目まで繰返し処理。 '行の削除の為下から上へと処理。 For Rw = RwMax To 1 Step -1 '値が無ならそのまま If Cells(Rw, 7).Value = "無" Then Cells(Rw, 7).Value = "無" '無でなかったら行削除 Else Rows(Rw).Delete End If Next Rw 'シート2のF,G列を列削除 Sheets("9月").Select Columns("F:G").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft End Sub
- ベストアンサー
- オフィス系ソフト
- エクセルでのマクロを教えて
下記のようなものをみたすマクロは組めますか? ファイルにシートが何種類かあります。 sheet1には各店の集計データーがあります。 その中にA列には集計の項目名がAZ列まであり 1行目には店舗名が10種類あります。 sheet2からはsheet名をsheet1に記入されている1行目にしている店舗名にしてあります。 またA列には集計の項目名がありますが sheet1にある項目と全く同じではなく 項目は少なくなっています。 また、sheet2からの店舗名にはsheet1の集計表にはない 店舗名もあります。 このsheet1のデーターをもとに sheet2の1行目の項目と一致する項目の値や数字を sheet1からコピーするというものです。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセル:マクロの起動条件
お世話になります。 以下の条件でのマクロを起動する方法、及びそのマクロを教えてください。 《条件》 ブックを開いた時、あるシートのC列でデータが入っている最下行の行番号とA列のデータが入って最下行の行番号の差が100以下だった場合、マクロを実行する。 (なおC列の行番号の方が必ず大きいです) ちなみに実行したいマクロは1~6の手順です。 1.ブックを開いたとき 2.「入力用」という名前のシートのC列でデータが入っている最下行の行番号とA列のデータが入っている最下行の行番号の差が100以下だった場合 3.「入力用」というシートにかかっているシートの保護をはずし 4.データが入っているC列の最下行のA~Z列を選択して、50行分 下にコピーする。 (例えば、C列の最下行が350行の場合、A350~Z350まで を選択したあと400行まで下にコピーする。) 5.再度シートの保護をかけ 6.A列でデータが入っている最下行の1つ下のセルを選択する ちなみに、2の条件に当てはまらないときはマクロを実行しません。 またC列の最下行よりA列の最下行が大きい数字になることはないはずですが、もし同じかA列の方が大きい場合、「エラー:C列よりA列が大きくなっています」と画面に表示させたい。 なお、行番号の差:100、選択するA~Z行、50行分下にコピー は変わる可能性があるので、修正する場合どの部分を修正すればよいかも教えてください。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 値によって違うマクロの実行
表題の質問をさせていただきます。よろしくお願いいたします。 A1セルには、別シートで計算された値が転記されるようになっており、1から45までのいずれかの数値が入っています。 その数値によって異なる動きをするマクロが3個あります。 1から15の時はマクロA 16から30の時はマクロB 31から45の時はマクロC おのおののマクロはフォームのボタンから実行できるように登録してあります。 現在はA1セルの数値を見て該当するボタンを押してマクロを実行しています。 たとえばA1の値が「25」の時はマクロCが登録してあるボタンCを押しています。 そこで質問させていただきたいのは 既存のボタンを撤廃し 新たに設置するひとつのボタンで3個のマクロを制御したいと思ったのです。 新たなマクロでA1の値を取得し、そのマクロ内で既存のマクロへ割り振るためには どのような記述をすればよいのでしょうか。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
お礼
見事、解決いたしました。 どこに問題があったのか見比べて、 ますます、このエクセルの数式についての理解が深まりました。 本当に助かりました。 オンライン上で、質問投稿をして、ここまで助けてくださって、 とても感謝をしております。 どうも、ありがとうございました。 m(_ _)m