①テキストファイルを読み込み
②テキストファイルの項目を分割(日付,商品コード,商品名,数量,単位)
※テキストファイル中身(商品コード順不同)
20190831,00001,商品-A,100,100
20190831,00003,商品-C,20,300
20190831,00002,商品-B,15,200
20190831,00006,商品-E,30,600
20190831,00010,商品-I,1,1000
20190831,00001,商品-A,1,100
20190831,00020,商品-X,10,2000
③②で分割した項目の各列を取得&配列に格納
④③を別のプロシージャに渡す
⑤②で分割した項目の商品コードを、エクセルファイルで検索
※エクセルファイル
商品コード 商品名 数量 単価 合計
00001 商品-A 0 \100 \0
00002 商品-B 0 \200 \0
00003 商品-C 0 \300 \0
00004 商品-D 0 \400 \0
00005 商品-E 0 \500 \0
00006 商品-E 0 \600 \0
00007 商品-F 0 \700 \0
00008 商品-G 0 \800 \0
00009 商品-H 0 \900 \0
00010 商品-I 0 \1,000 \0
⑥商品コードが一致した場合は、対象行の数量に値を設定
⑦商品コードが一致しない場合は、エクセルの最終行に各項目の値を設定(商品コード,商品名,数量,単価)
■問題点
⑥で対象の商品コードで検索して一致した際に思っている動きになりません。
例えば、商品コード「00001」で検索した際は、数量の「100」が
C2に入ってくれるのですが、
商品コード「0000X」(00001以外)で検索した際は数量の値が対象のCXセルではなくC2に値が入ってしまいます。
VBA
1Function 売上ファイル処理(ByVal p売上ファイル As String, ByVal p新規シート As Worksheet) As Boolean 2 3 Dim 売上ファイル As String 4 Dim 新規シート As Worksheet 5 Dim レコード As String 6 Dim 商品コード As String 7 Dim 商品名 As String 8 Dim 数量 As Long 9 Dim 単価 As Long 10 11 '①テキストファイルを読み込み 12 Open p売上ファイル For Input As #1 13 14 Dim aryRec As Variant 15 16 Do Until EOF(1) 17 Line Input #1, レコード 18 MsgBox レコード 19 20 '②テキストファイルの項目を分割(日付,商品コード,商品名,数量,単位) 21 '③②で分割した項目の各列を取得&配列に格納 22 aryRec = Split(レコード, ",") 23 24 MsgBox "日付:" & aryRec(0) 25 26 MsgBox "商品コード:" & aryRec(1) 27 商品コード = aryRec(1) 28 29 MsgBox "商品名:" & aryRec(2) 30 商品名 = aryRec(2) 31 32 MsgBox "数量:" & aryRec(3) 33 数量 = aryRec(3) 34 35 MsgBox "単位:" & aryRec(4) 36 単価 = aryRec(4) 37 38 '④③を別のプロシージャに渡す 39 Call 売上設定処理(p新規シート, 商品コード, 商品名, 数量, 単価) 40 41 Loop 42 Close #1 43 44 45Function 売上設定処理(ByRef p新規シート As Worksheet, ByVal p商品コード As String, ByVal p商品名 As 46String, ByVal p数量 As Long, ByVal p単価 As Long) 47 48 49 Dim i As Integer 50 Dim myRange As Range 51 Dim myObj As Variant 52 53 i = 1 54 Set myRange = p新規シート.Range("A" & i) 55 56 If myRange Is Nothing Then 57 MsgBox "みつかりませんでした。" 58 '⑦未実施 59 Else 60 Set myObj = myRange.Find(p商品コード) 61 '⑥商品コードが一致した場合は、対象行の数量に値を設定 62 i = i + 1 63 p新規シート.Range("C" & i) = p数量 64 65 66 End If 67 68End Function
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/19 07:53
2019/09/19 08:00