• ベストアンサー

関数 or マクロ(エクセル)

行の項目と列の項目を検索して重なる部分のデータを拾いたいのですがどうもうまくいきません。初歩的なことかもしれませんが、VLOOKUPとHLOOKUP関数をあわせたようなもの。LOOKUPウィザードでもやってみるのですがうまくいかないのでよろしくお願いします。(最終的にVBAでやりたいです) 元のデータは、(Sheet3)にあって(Sheet2)で項目を並べ縦と横の項目に一致するデータを持ってきたいです。 Sheet3にあるデータは、別のブックよりVBAで検索したデータを持ってきています。 また、Sheet1、2ともその都度行数(検索項目数)が変わるので、できればデータシートの行数にあわせて行きたいのですが・・・こうなるとVBAになると思い挑戦しているのですがこれがまたうまくいきません。 で、データの行数にあわせて拾い出し、A列で最終行を検索して、L列~W列の各列の3行目に、5行目~最終行までの合計を取ろうと思っています。 説明が下手ですみませんが、よろしくお願いします。 環境:Win2000、98 Office2000です。

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.5

こんにちは。 > cSheet(data)は、C3を基点とし、Y3(固定)までの横の項目と縦は可変(商品コード)です。 とありますが、変更されたソースから判断し C2~Y2 までは項目行だと 解釈します。 .Cells(mRow, mCol) = "=Vlookup(" & .Cells(mRow, 4).Address & _ "," & cAddress & "," & List(mCol - 5) - 2 & ",0)" これだとどうでしょうか? 以下、変更部分について一応解説します。 .Cells(mRow,1) → .Cells(mRow,4) 1はA列、4はD列です。D列基点ではこうしないとダメです。 List(mCol - 2) → List(mCol - 5) - 2 List配列には、タイトル項目が同じ場合の列番号が入ります。R1C1形式で 表示した場合、A列は1、B列は2、... 配列は、0から始まりますので、元の例では mCol(列番号) が 2の時に mCol - 2 = 0 を指すようにしてます。 今回は、最初のmColが E(5)列なので、 mCol - 5 にする必要があります。 つまり、E、F、G、H、Y と5個の値を収めた場合、配列の有効Index は0~4の 5個です。List(0) には、E列を表す 5 が入り、List(4)には Y列を表す 25が 入ります。 一方、mCol はループする為の列番号ですので、D(5)列からスタートして、5回 ループしたとすると元のままでは、 List(5 - 2) = List(3) List(6 - 2) = List(4) List(7 - 2) = List(5) ← ここで インデックスが範囲を超えます。 List(8 - 2) = List(6) List(9 - 2) = List(7) また、配列に収めたのは列番号なので、Dataシートの最初の列とSheet2の 最初の列が、ずれた分を補う為に -2 としています。 VBE画面で、表示-イミディエイトウィンドウを表示して下記部分に Debug.Print を追加すると、配列に収めた列番号がわかります。 For Each r1 In pRange  For Each r2 In cRange   If r1 = r2 Then    List(cnt) = r2.Column    Debug.Print r2.Column  'これを追加    Exit For   End If  Next r2  cnt = cnt + 1 Next r1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ここに Debug.Print を追加するとセルに入れた VLookup関数 が解かります。 For mCol = 5 To .Range("D5").End(xlToRight).Column  .Cells(mRow, mCol) = "=Vlookup(" & .Cells(mRow, 4).Address & _         "," & cAddress & "," & List(mCol - 5) - 2 & ",0)"    '↓これを追加  Debug.Print "=Vlookup(" & .Cells(mRow, 4).Address & _        "," & cAddress & "," & List(mCol - 5) - 2 & ",0)"  .Cells(mRow, mCol) = .Cells(mRow, mCol) Next mCol エラーの場合と、修正した場合、比べてみると解かりやすいでしょう。

rurucom
質問者

お礼

本当にご丁寧にありがとうござしました。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

他の方の回答プログラムは精緻で複雑です。 私のは簡単で短いを旨とし、変数の宣言も略してGoTo文もあり幼稚ですが、どちらを採りますか。 ----- 条件:第1行目は項目見だしとする Sheet3はA列でソートしておくこと。(VBAでも出来ますが。)     Sheet2はA列でソートしておくこと。(同上) Sheet2には同じキーは現われないものとする。     目視により、Sheet3第2列-->Sheet2第2列にセット            Sheet3第3列-->Sheet2第3列にセット            Sheet3第6列-->Sheet2第4列にセット・・・・・     をメモしておくこと。     自動的にSheet2の項目名(漢字)をSheet3で探して、    データを取ってくることも出きるが、複雑になるので避けます。 ------ Sub test01() a = Worksheets("sheet3").Range("a2").CurrentRegion.Rows.Count b = Worksheets("sheet2").Range("a2").CurrentRegion.Rows.Count j = 2 i = 2 '---- p01: '-----終わり判定 If i > a+1 Then GoTo p02 If j > b+1 Then GoTo p02 '----Sheet2のキーとSheet3のキーの比較をする '----一致する時Sheet3へShhet2より項目データ値をセット If Worksheets("sheet3").Cells(i, 1) = Worksheets("sheet2").Cells(j, 1) Then Worksheets("sheet2").Cells(j, 2) = Worksheets("sheet3").Cells(i, 2) Worksheets("sheet2").Cells(j, 3) = Worksheets("sheet3").Cells(i, 3) Worksheets("sheet2").Cells(j, 4) = Worksheets("sheet3").Cells(i, 6) '--- i = i + 1 'マスターとトランザクションを進める j = j + 1 Else '---一致しない時 i = i + 1 'マスターだけを進める End If GoTo p01 '---終了 p02: End Sub マスターはSheet3,トランザクションはSheet2 です。「進める」とはポインターのi,jを+1して、下の 行を見ると言うこと。

rurucom
質問者

お礼

ありがとうございます。シンプルで良いですね!

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

先の回答でも半分は出来てると思いますが、詳しい内容から判断し、 処理速度を重視して下記のようにしました。新規ブックを作り試して 下さい。 前提条件 シート名 DataSheet のセル A1 から列方向にタイトル行がある。 シート名 DataSheet のセル A2 から行方向に1つ以上のデータがある。 シート名 Sheet2 のセル A2 から移すためのタイトル行がある。 シート名 Sheet2 のセル A2 からのタイトル行で A2~C2は集計項目 ではない。例)A2=商品CD、B2=商品名、C2=単価、D2~ 月別集計列 シート名 Sheet2 のセル A3 以降に検索用データが1つ以上ある。 上記のタイトル列とデータ行は、途中に空白セルがない。 '--------------------------------------------------------------- Sub Test2() '対象のシート名を指定(cSheetはコピー元、pSheetはペースト先) Const cSheet = "DataSheet" Const pSheet = "Sheet2" '変数宣言 Dim List, cRange As Range, pRange As Range Dim r1 As Range, r2 As Range, cnt As Integer Dim cAddress As String, mRow As Long, mCol As Integer '速度アップの為、画面を止める Application.ScreenUpdating = False 'エラーの場合 ERR へ飛ぶ On Error GoTo ERR 'コピーシートのタイトル行を判定 With Worksheets(cSheet)  Set cRange = .Range("B1:" & _    .Range("B1").End(xlToRight).Address) End With 'ペーストシートのタイトル行を判定 With Worksheets(pSheet)  Set pRange = .Range("B2:" & _    .Range("B2").End(xlToRight).Address) End With 'ペーストシートの必要数で配列の要素数を確定 ReDim List(pRange.Count - 1) 'ペーストシートの項目とコピーシートの項目が同じ '時にコピーシートの項目列番号を配列に格納 cnt = 0  For Each r1 In pRange   For Each r2 In cRange     If r1 = r2 Then       List(cnt) = r2.Column       Exit For     End If   Next r2    cnt = cnt + 1  Next r1 'コピーシートのVLOOKUP用範囲を取得 With Worksheets(cSheet).Range("A1").CurrentRegion  Set cRange = .Offset(1, 0). _        Resize(.Rows.Count - 1, .Columns.Count)    cAddress = cSheet & "!" & cRange.Address End With 'ペーストシートにVLOOKUP関数を代入 'あまり多いと重くなるので、すぐに値に置き換え With Worksheets(pSheet)  For mRow = 3 To .Range("A2").End(xlDown).Row   For mCol = 2 To .Range("A2").End(xlToRight).Column     .Cells(mRow, mCol) = "=Vlookup(" & .Cells(mRow, 1).Address & _              "," & cAddress & "," & List(mCol - 2) & ",0)"     .Cells(mRow, mCol) = .Cells(mRow, mCol)   Next mCol  Next mRow End With 'ペーストシートにSUM関数を代入 With Worksheets(pSheet)  mRow = .Range("A2").End(xlDown).Row  For mCol = 4 To .Range("A4").End(xlToRight).Column     .Cells(1, mCol) = "=SUM(" & .Cells(3, mCol).Address & ":" & _               Cells(mRow, mCol).Address & ")"  Next mCol End With '不要変数の初期化 Set cRange = Nothing: Set pRange = Nothing Set r1 = Nothing: Set r2 = Nothing: Set List = Nothing '正常終了の場合はここで終わる Exit Sub ERR: 'エラー時はメッセージを表示し終わる  MsgBox "エラーの為に実行が中止されました。", _      vbCritical + vbOKOnly, "エラー" End Sub '--------------------------------------------------------------- VBE画面でソース内の ScreenUpdating を選択しF1キーを押せば、VBA ヘルプが呼び出せます。VBAヘルプがインストールされてない場合は、 OfficeのCDから追加インストール出来ます。 「初心者」という言葉は免罪符ではありません。ソースにコメント を加えろと言うのは、自分で調べる事を放棄しているのと同じである と私は思います。 「ヘルプの意味が解らない」「どうしてこのソースでこういう動きになる のか解らない」って事はあるでしょう。 自分で調べたうえでの疑問なら、喜んでお答えします。解かる範囲なら。

rurucom
質問者

補足

>「初心者」という言葉は免罪符ではありません。ソースにコメント >を加えろと言うのは、自分で調べる事を放棄しているのと同じである >と私は思います。 おっしゃるとおりです。大変失礼致しました。にも関わらずご丁寧な回答ありがとうございました。昨日からがんばって実際のデータに移してコードを書いているところです。 Sub test2()ではうまくいったのですが、なかなかうまく動いてくれません。 実際のデータは、 cSheet(data)は、C3を基点とし、Y3(固定)までの横の項目と縦は可変(商品コード)です。 pSheetは、D5を基点としR5(固定)までのcSheetから必要な部分だけを抜いた項目と縦は可変(商品コード)です。 どうしても .Cells(mRow, mCol) = "=Vlookup(" & .Cells(mRow, 1).Address & _ "," & cAddress & "," & List(mCol - 2) & ",0)" で止まります。→(List(mCol-2)=〈インデックスが有効範囲にありません〉) どうしてでしょうか?お助けいただけますか?よろしくお願いいたします。 pSheetの項目に1つの日付からとってきた日付の項目があります。 L5以降のセルに、=DATE(YEAR(Sheet1!$E$9),MONTH(Sheet2!$E$9)+0,1)で右へ1月づつ増えて6ヶ月あります。cSheet(data)には1年間の日付の項目があります。毎月1日(2002/5/1・・・) また、各月の中(縦横とも項目はすべて有)のデータはすべて埋まってはおらず虫食い状態です。 これも問題でしょうか? ↓今書いているコードです。 Sub test2() Const cSheet = "data" Const pSheet = "Sheet2" '変数宣言 Dim List, cRange As Range, pRange As Range Dim r1 As Range, r2 As Range, cnt As Integer Dim cAddress As String, mRow As Long, mCol As Integer Application.ScreenUpdating = False 'On Error GoTo ERR -------------Check 中断------------------- With Worksheets(cSheet) Set cRange = .Range("D2:" & _ .Range("D2").End(xlToRight).Address) End With With Worksheets(pSheet) Set pRange = .Range("E5:" & _ .Range("E5").End(xlToRight).Address) End With ReDim List(pRange.Count - 1) cnt = 0 For Each r1 In pRange For Each r2 In cRange If r1 = r2 Then List(cnt) = r2.Column Exit For End If Next r2 cnt = cnt + 1 Next r1 With Worksheets(cSheet).Range("C2").CurrentRegion Set cRange = .Offset(1, 0). _ Resize(.Rows.Count - 1, .Columns.Count) cAddress = cSheet & "!" & cRange.Address End With With Worksheets(pSheet) For mRow = 6 To .Range("D5").End(xlDown).Row For mCol = 5 To .Range("D5").End(xlToRight).Column .Cells(mRow, mCol) = "=Vlookup(" & .Cells(mRow, 1).Address & _ "," & cAddress & "," & List(mCol - 2) & ",0)" .Cells(mRow, mCol) = .Cells(mRow, mCol) Next mCol Next mRow End With 'ペーストシートにSUM関数を代入 ----------とめています。都合上別シートで集計することにしました。 'With Worksheets(pSheet) ' mRow = .Range("A2").End(xlDown).Row ' For mCol = 4 To .Range("A4").End(xlToRight).Column ' .Cells(1, mCol) = "=SUM(" & .Cells(3, mCol).Address & ":" & _ ’ Cells(mRow, mCol).Address & ")" ' Next mCol 'End With '不要変数の初期化 Set cRange = Nothing: Set pRange = Nothing Set r1 = Nothing: Set r2 = Nothing: Set List = Nothing Exit Sub 'ERR: -----------------------とめて動きを見ています----------------- 'MsgBox "エラーの為に実行が中止されました。", _ ' vbCritical + vbOKOnly, "エラー" End Sub

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

こんにちは。 myFind = Cells(myRow, myCol) ここは、 myFind = ws.Cells(myRow, myCol) にしないといけませんでした。

rurucom
質問者

補足

質問が悪かったようですみません。 DataSheet(Sheet3)に例えば・・・ 商品コード  商品名  単価  5月数量  4月数量   3月数量  ・・・  123      あ     5     11     12     10  145      い     7     15     17     14  167      う     6     19     10      0  129      え     5     14     19     13 実際にはもっとたくさんの項目(列)と行数がありますが・・・ これをSheet2の 仮にA列に複数行の商品コードと項目をあらかじめ入力しておき、商品コードに対応する各項目の値をB列以降に並べていきたい。 Sheet2にはあらかじめ商品コードと項目が書いてあり、Sheet3にデータを流した時にそのままSheet2に流れてくるといいです。 結果↓ 商品コード 商品名  単価  3月数量  4月数量   123      あ     5      10      12      145      い     7      14      17  167      う     6       0      10 で・・・商品コードのあるA列の最終行を見つけて、各月の数量の合計を項目の上に求めたい。 うまく説目ができなくてすみません。よろしくお願いします。また、VBAはまだ初心者のなでできれば、コードの中に処理をさせている内容を記入していただけると助かります。なかなか、応用ができないもので、お手数ですがよろしくお願いします。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんにちは。 文章だけだと、何をされたいのか解りずらいですね。 ハズしてるかも知れませんが... Sheet1のA1~D4にこんな表があったとします。     カメラ  時計  指輪 A商店  2000   5000  8000 B商店  3000   6000  9000 C商店  4000   7000  9500 以下のSub Testを実行すると 6000 と表示します。 新規ブックでテストして下さいね。 Sub Test()  MsgBox myFind("B商店", "時計", "Sheet1") End Sub Function myFind(fRow As String, fCol As String, sN As String) As String Dim ws As Worksheet, myRow As Long, myCol As Integer Dim rowRange As Range, colRange As Range, r As Range  On Error GoTo ERR  Set ws = ThisWorkbook.Worksheets(sN)  Set rowRange = ws.Range("A2:" & ws.Range("A65536").End(xlUp).Address)  Set colRange = ws.Range("B1:" & ws.Range("IV1").End(xlToLeft).Address)  For Each r In rowRange   If r.Text = fRow Then     myRow = r.Row     Exit For   End If  Next r  For Each r In colRange   If r.Text = fCol Then     myCol = r.Column     Exit For   End If  Next r  myFind = Cells(myRow, myCol)  Exit Function ERR:  myFind = "Not Found" End Function

関連するQ&A

  • EXCELマクロ 検索

    Excelマクロで 検索とその結果のコピーを行いたいのですが、全くの素人のためご教授願えればと思います。 Excel2002で 2つの表から共通する部分をKEYに付随するデータ抜き出したいと思っています。関数VLOOKUPを使えば簡単な作業かと思いますがVBAではそのVLOOKUPやFIND、それにLOOPなどの使い方が今ひとつ理解 できません。 具体例として 表1には A-Z列まで約1000行のデータが存在します。 表2は表1と同じシート上の直ぐ隣列AA-AK列まで表1より必ず多い行数のデータが存在します。また表1のA列にあるデータは すべて必ず表2のAA列に含まれます。 行いたい作業は、VLOOKUPのような検索で、表1A列と表2AA列に共通したデータがあった場合、表2の該当セルを基準としてALからBJ列セルに表1の該当行のデータB-Z列をすべてコピー貼り付けすることです。 A・AA列とも同列内では重複も空白もなくソートされています。 これら以外の列には同じValueのデータや空白が存在します。またデータ件数(行数)も表1・2とも一定ではなく都度変動します。 解りやすくご説明いただけると幸いです。宜しくお願いいたします。

  • EXCELマクロ 検索 VLOOKUP

    Excelマクロで 検索とその結果のコピーを行いたいのですが、全くの素人のためご教授願えればと思います。 Excel2002で 2つの表から共通する部分をKEYに付随するデータ抜き出したいと思っています。関数VLOOKUPを使えば簡単な作業かと思いますがVBAではそのVLOOKUPやFIND、それにLOOPなどの使い方が今ひとつ理解 できません。 具体例として 表1には A-Z列まで約1000行のデータが存在します。 表2は表1と同じシート上の直ぐ隣列AA-AK列まで表1より必ず多い行数のデータが存在します。また表1のA列にあるデータは すべて必ず表2のAA列に含まれます。 行いたい作業は、VLOOKUPのような検索で、表1A列と表2AA列に共通したデータがあった場合、表2の該当セルを基準としてALからBJ列セルに表1の該当行のデータB-Z列をすべてコピー貼り付けすることです。 A・AA列とも同列内では重複も空白もなくソートされています。 これら以外の列には同じValueのデータや空白が存在します。またデータ件数(行数)も表1・2とも一定ではなく都度変動します。 解りやすくご説明いただけると幸いです。宜しくお願いいたします。

  • エクセルVBAでLOOKUP関数がうまくできません

    エクセルVBAでLOOKUP関数がうまくできません。 入力シートと判別用のシートがあり入力シートで入力した品名を検索値 として判別用シートで数値に置き換えた値をLOOKUPで検索したいのですが WorksheetFunctionクラスのVLOOKUPプロパティを取得できませんと 実行時エラーが出ます。検索しましたが修正方法がわかりません。 構文のどこが原因なのか教えてください。 VBA初心者です。よろしくお願いします。 sub test() Dim データ行 As Long Dim データ数 As Long データ行 = Cells(Rows.Count,8).End(xlUp).Row For データ数 = 11 To データ行 Cells(データ数 ,32) = Application.WorksheetFunction.VLookup(cells(データ数,8),Worksheets("判別シート").Range("B11:E110"),5,False) Next データ数 End sub

  • Excel VBA 残りの行数を計算し、貼付けられるか、別のシートに貼り付けるかを判断し実行するマクロ

    Sheet1に二十数個の項目が列記されており、その内、必要な項目だけをコピーしてheet2に貼り付けて行きます。 一項目の行数は6行~18行とまちまちです。 必要な項目はその都度違います。 heet2の行数は50行と決まっています。 よって、あるところで50行を超えてしまいますので、Sheet3へ移動し続きを貼り付けます。 このとき、一つの項目がSheetをまたいではいけません。 (Sheet1に空白が出来てもかまいません) 要は、貼り付ける行数と残りの行数を自動で判断して、入る場合は貼付け、入らない場合はSheetを変えて貼付けるVBAのコードを具体的にご教授願いたいのです、宜しくお願いします。 Excel2000、VBAはマクロの自動記録をいじる程度のスキルです。

  • 関数について。

    vlookup 関数とlookup関数と、hlookup関数の違いは、何でしょうか?ご教授いただけないでしょうか?すみませんが。で、もう一つ疑問点があり、 では、どういう時に、vlookup 関数と、lookup関数を使い分けるのでしょうか? 1行目だけを求めたいだけとかでしょうか?ご教授いただけないでしょうか?すみません。 について、ご教授いただけないでしょうか?すみませんが。

  • エクセルマクロVLookupについて

    定義ブック.xlsm : 項目名、項目カテゴリ名、項目名長、文字種類 を定義する為ブック。 辞書ブック.xls : 項目カテゴリ名、項目名長、文字種類をこのブック内で色々処理して設定している。 定義ブックの項目名で検索し、 辞書ブックの項目カテゴリ名、項目名長、文字種類を参照してくる。 定義ブックを開いた時に辞書ブックの内容から値を参照(vlookup)するようにしたいです。 定義ブック、辞書ブック、ともに今後、行数が増える想定なので、 何行目まで、というのを変数にしてマクロで実装しようとしています。 そこで、 Application.WorksheetFunction.VLookup() を使ってみたのですが、そのセルが正常に値を表示しません。 vlookupをセルにベタ書きにすれば値は取得できている為、検索値が見つからない為にエラーになっている系統ではないハズです。 エクセルのバージョンは2007です。 また、エクセルにvlookupをベタ書きするようにマクロを組むと、それは正常に値を表示します。 (最悪この手ですが…、セルにカーソルを合わせるとvlookupの式が表示され、避けたいトコロです) どのように修正すれば良いでしょうか…? マクロは初心者です…。 以下、ソースの抜粋です。 ****************************************** Dim ItemCode As Variant Dim SerchArea As Variant Dim LastRow As Long '辞書ブックをアクティブにする Workbooks("辞書ブック.xls").Activate ActiveWorkbook.Worksheets("辞書シート").ActivateLastRow = Cells(Rows.Count, 1).End(xlUp).Row '項目数を取得 Dim LastRow As Long LastRow = Cells(Rows.Count, 1).End(xlUp).Row '最終行を取得(辞書ブック.辞書シートのvlookupを何行目までの範囲にするか) SerchArea = "[辞書ブック.xls]辞書シート!$B$5:$F$" & LastRow '定義ブックをアクティブにする Workbooks("定義ブック.xlsm").Activate ActiveWorkbook.Worksheets("定義シート").Activate For I = 11 To ColumnCnt 'C11セルから下へ、項目名を検索値として取っていく ItemCode = Cells(I, 3) '辞書ブックから値を取得(項目カテゴリ名) 【この書き方だとセルには「value!」と表示される】 Cells(I, 16).Value = Application.VLookup(ItemCode, SerchArea, 2, False) '辞書ブックから値を取得(項目名長) 【この書き方ならセルには正しく値が表示されるけど、勿論、セルにカーソルを合わせると、vlookupの式が表示される】 Cells(I, 38).Value = "=VLOOKUP(C" & I & ",[辞書ブック.xls]辞書シート!$B$5:$F$" & LastRow & ",4,FALSE)" Next I

  • エクセルでVLOOKUP関数

    お世話になっています。 Excel2003を使っています。 元となる名簿のブックAがあります。 それぞれ、違うブックにVLOOKUP関数を使って、範囲をAからリンクさせるようにしています。 ブックAの名簿は人が増えたり、個人データを新たに追加する毎に行や列が増えていきます。 今のところ =VLOOKUP(A1,'[ブックA.xls]名簿'!$A$3:$W$100,3,0)) この式を違うブックに入れているのですが、 ブックAの行数が増えても、「100」のまま動きません。 ブックAの行数・列数が増えたら、リンクしてる関数を入れている、他ブックも自動的に増えるようにする方法はありますか? 初歩的な質問ですみませんが、よろしくお願いします。

  • ExcelのVLOOKUPの列番号を一括で変更したい

    検索しても自分では見つけられなかったので、質問させてください。 私はExcel2007の一個前のものを使っています。 仕事上、sheet1でVLOOKUPを使い、sheet2(データ入力用シート)の情報を読み取るブックを使っています。 作った人とは連絡が取れないので、知恵をお借りしたいです。 そのExcelのVLOOKUPでは、sheet2の14列目を読み取るようにしていますが、13列目に列を挿入して、15列目(挿入前は14列目)を読み取るようにしたいです。 しかし、sheet1のVLOOKUPは1500行も使っている上に、VLOOKUPを使っている行や別のデータを入れている行もあり、簡単には引数を14から15に変更出来ません。 sheet1のVLOOKUPの14を15に返る簡単な方法は無いでしょうか? つたない説明で申し訳ありません。 宜しくお願いします。

  • 照合した結果によって決めた値を転記するマクロ

    シート1には A~F列まで値があり、行数は都度相違し約15,000行くらい。 データは2行目から開始です。 シート2には A~AE列まで値があり、行数は都度相違し約5,000~25,000行 あり同じくデータは2行目からです。 シート1の行ごとに A列,B列,C列の順で連結した値と シート2の行ごとに F列,G列,B列の順で連結した値を 照合させます。 その値が (1)シート1にもシート2にもある場合は   シート2のAF列に1と転記 (2)シート1には無いがシート2にはある場合は   シート2のAF列に2と転記 (3)シート1には有るがシート2には無い場合は   シート2のAF列に3と記入 シート2のデータのある行まで 作業を繰り返すマクロの記述を教えてください。 VLOOKUPを使用したマクロを作成しましたが 判定1,2,3の転記がうまく出来ないのと VLOOKUPが重すぎて処理が遅すぎるので 速く処理が出来るとうれしいです。 例 シート1 A2=XXXX B2=1234 C2=5678 シ-ト2 B2=1234 F2=XXXX G2=5678 シート1の値=XXXX12345678 シート2の値=XXXX12345678 照合する ↓(一致なので) シート2のセルAF2に1と転記

  • 関数~!

    行と列の数値を検索して交差したところに入力されている数値を返したい。 vlookupとhlookupを同時に使っているイメージなんですが…(-_-;) 教えてください_(._.)_

専門家に質問してみよう