お世話になっております。
現在、ExcelVBAの勉強をしているのですが以下の問題で色々と考えております。
【やりたいこと】
【プログラム】
1:①のSheet1のA列に「Total」を結合させた文字列を作成
2:1の文字列をキーにしてVlookupでSheet2のA列を探し、見つかったらB列の値を①のD列にセット
【悩んでいること】
上記A列に「Total」を結合させた文字列をメインキーとして、
下記の図A1~B6の範囲をVlookupの検索範囲としたいが、
A列にスペースが入っているためきちんと参照できていない
【コード】
Option Explicit Private Sub Test() '++++ファイル Dim wb As Workbook 'ファイルのワークブック格納 Dim ws_MainSheet As Worksheet 'Sheet1シート名格納 Dim strMain_Lastcol As String '最終行格納 Dim ws_SubSheet As Worksheet 'Sheet2シート名格納 Dim strSub_Lastcol As String '最終行格納 Dim subTbl As Range 'データを参照する範囲 Dim MainKey As String 'データのメインキー Dim cnt As Integer 'For ~ Next のカウント変数 '++++定数 Const strPath As String = "C:\" Const strFileName As String = "Vlookuptest.xlsm" Const ws_Main_SheetName As String = "Sheet1" Const ws_Sub_SheetName As String = "Sheet2" Const Main_col As String = "A" Const Assin_col As String = "D" 'ファイルを開く Set wb = Workbooks.Open(strPath & "\" & strFileName) 'ファイル内のメインシート(Sheet1)取得 Set ws_MainSheet = wb.Worksheets(ws_Main_SheetName) ws_MainSheet.Activate 'ファイル内のサブシート(Sheet2)取得 Set ws_SubSheet = wb.Worksheets(ws_Sub_SheetName) ws_SubSheet.Activate '最終行をセット Call lastcol(ws_SubSheet, strSub_Lastcol) Set subTbl = ws_SubSheet.Range("A1:B" & strSub_Lastcol) 'メインシートSheet1の最終行セット Call lastcol(ws_MainSheet, strMain_Lastcol) 'ループ開始 cnt = 2 For cnt = 2 To strMain_Lastcol MainKey = ws_MainSheet.Range(Main_col & cnt).Value + "Total" On Error GoTo ErrHandl 'Vlookup Dim ret As String '★★★ ret = WorksheetFunction.VLookup(MainKey, subTbl, 2, False) ws_MainSheet.Range(Assin_col & cnt).Value = ret Next Exit Sub ErrHandl: ret = "該当なし" Err.Clear Resume Next End Sub Function lastcol(ws_Sheet As Worksheet, strCnt As String) '最終行を取得 With ws_Sheet strCnt = .Cells(Rows.Count, 1).Row 'Excelの最終行を取得 strCnt = .Cells(strCnt, 1).End(xlUp).Row '目的の列の最終行を取得 End With End Function
【問題点】
上記のコードだと、Sheet2のA列にスペースがない場合は問題なく動きます。
しかし、今回はSheet2のA列にスペースが入っているのでちゃんと動きません。
(スペースは全角、半角、または半角を2つなど色々なパターンがあります)
もしSheet2のA列にスペースがなくて、例えば「1月Total」と言うデータになっていれば
Sheet1のA列に「Total」を結合させた文字列をキーにしてすぐにVlookupができます。
でも、Sheet2のA列にスペースがあるからそれが難しいということで困っています。
なお、ワイルドカードを使えば?とおっしゃる方もいると思いますが、今回は検索範囲をあらかじめsubTblにセットしているのでどうやればいいのかも分かりません。
Vlookup関数を動かす前にあらかじめSheet2のA列からスペースを削除しておけばいいのだと思いますが、どうやればいいのかなと悩んでいます。
でもSheet2の方でA列のデータをコピーし、新しくC列に貼り付けて、そこでスペースを削除する、
その後、C列に対してVlookupを使うというのは不可、です。
どうやればSheet2のA列のスペースを削除した上でVlookup関数を動かすことができるのでしょうか?
ちなみに、別の列にあらかじめスペースを削除した値を貼り付けるというのはしないものとします。
どなたかご存知の方教えていただけると幸いです。
それではどうぞよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー