ID非公開さん
2022/5/11 11:58
1回答
エクセルVBAで条件が一致したとき、他シートの値を転記する方法。 月に一度、CSVデータをエクセルに取り込み、CSVのデータを下記の表に転記します。
エクセルVBAで条件が一致したとき、他シートの値を転記する方法。 月に一度、CSVデータをエクセルに取り込み、CSVのデータを下記の表に転記します。 CSVを取り込むところまではうまくいきましたが、その後がどうしたら良いのか分からないため、お力をお借りしたいです。 -------------------------------------------- InputData: Mym = InputBox(" (月 (例)4月 )を入力してください。") -------------------------------------------- このように指定し、「4月」を入力した時は表のD6に、「5月」の時はE6に、区分Bの項目名(B列)とCSVシートのタイトル(A列)が一致するところに別シートのCSV(シート名)からデータが転記されるようにしたいです。 (他の方法があれば、InputBoxは使わなくても構いません) 4月~3月まであり、毎月作業を行います。CSVには1か月分だけデータが入っています。 転記する値はCSVのB列「データNavi,」の後の数字3桁~4桁です。 ただし、「野菜全般」のみA列に数字があります。(難しければここだけ手入力でもOKです) 表には空白があり、CSVには転記不要な項目も混ざっています。 CSVのデータは46行目まであり、それ以降のデータにも同じ項目名がありますが、読み込まないようにしたいです。 以上になりますが、どのようなコードで動かすことができるか、ご教示いただきたく、よろしくお願いいたします。
Visual Basic | Excel・104閲覧・250
ベストアンサー
環境が不明なので以下の前提です。違っている場合は、適宜に修正してください。だめな場合はあきらめてください(ごめんなさい)。 ・CSVのシート名は「CSV」としています。 ・CSVシートの開始日セル(A9)を固定として、月の列を求めています。年、日は無視です。 ・CSV開始行を13行目とし、46行目(指定)までとしています。 ・実施は、「月データ」の設定シートで実施してください。 ・月データシートのB列で最初にマッチングしたものに設定しています。 「表には空白があり、CSVには転記不要な項目も混ざっています。」がよくわかりません。「すいか」かもしれませんが、マッチングさせたくないのであれば、文字を変更してください。例えば「すいか」を「(すいか)」にするなど。変更ができない場合は、使用をあきらめてください。 ・「Private Sub CommandButton1_Click()」は実施環境にあわせてください。 Private Sub CommandButton1_Click() Dim ws2 As Worksheet, ii As Long Dim iMonth As Long, iRow As Long ''「CSV」シートを設定する。 Set ws2 = Worksheets("CSV") ''「開始日」より「月」の列を取得する。 With ws2.Range("A9") iMonth = Mid(.Value, Len(.Value) - 3, 2) End With If iMonth <= 3 Then iMonth = 11 + iMonth Else iMonth = -1 + iMonth End If ''13行目(データ開始行)~46行目までを処理する。 For ii = 13 To 46 With ws2.Cells(ii, "A") Select Case True Case .Value Like "野菜全部*" ''「野菜全部」のデータを設定する。 On Error Resume Next iRow = 0 iRow = Application.WorksheetFunction.Match("野菜全部", Range("B:B"), 0) On Error GoTo 0 If iRow > 0 Then Cells(iRow, iMonth).Value = Split(.Value, ",")(1) End If Case .Value = "" ''「空白」の場合は無視する。 Case Else ''上記以外でのマッチングデータを設定する。 On Error Resume Next iRow = 0 iRow = Application.WorksheetFunction.Match(.Value, Range("B:B"), 0) On Error GoTo 0 If iRow > 0 Then Cells(iRow, iMonth).Value = Split(ws2.Cells(ii, "B").Value, ",")(1) End If End Select End With Next ii ''使用変数を開放する。 Set ws2 = Nothing End Sub
質問者からのお礼コメント
ありがとうございました! 時間かかってしまいましたが、何とかできました!
お礼日時:5/17 16:17