在庫管理のため、バーコードハンディターミナルで収集したCSV形式のログデータを、別のエクセルファイルに転記するマクロを組もうとしています。
ログファイルには、以下のようにバーコードのコード番号に対して在庫数が入力してあります。
AAA01,10
AAA02,15
BBB01,5
BBB02,7
AAA01とAAA02は同じ種類なので、在庫数は転記先のエクセルファイルの同じセル内に数値を加算します。
この時、同じ文字列(ここではAAAまたBBB)が含まれるコードの在庫数をコピーするマクロはどのようにしたらよいのでしょうか?
No.8
- 回答日時:
通常質問に出る表現や、私が使う表現と、質問の言葉と違うようなので、質問の内容が良く伝わりません。
もう少し勉強をしてからこういうシステムに取り組むのが適当かと。>在庫管理のため、バーコードハンディターミナルで収集した
本質的ではない。書くと邪魔。
>CSV形式のログデータ
他のデータ収集システムがCSVデータ形式で作ってくれていて存在するのですね。
>別のエクセルファイルに転記する
「別」に決まっている。「転記」するとは「読み込む」ことでしょう。
既にエクセルのシートに読み込むところまでできましたか。
>ログファイルには、
できたとして、CSVファイルを読み込んだ、エクセルのシートは、既にできていますか。
できているなら、後はエクセルのシートの話をしてください。来歴のログファイルの話をする必要はありません。エクセルVBAの話のようですから。
>
シートの列・行構成を明確に記してください。ここから質問を始めても良いぐらい。カンマは入れず
A列(商品記号?) B列(在庫数)
AAA01 10
AAA02 15
BBB01 5
BBB02 7
>転記先のエクセルファイルの同じセル内に数値を加算します。
別シートに同一種類商品は合算した計数を、種類別に出したいのでは
ーーー
普通はAAA,BBB,CCC・・別合計を出したいという質問が多い。(昨日も載った)
本質問では、あるルールに基づいて集計したいらしい。
そのルールとは。質問の説明が明確でない。
(1)AAAは文字列ですか。桁数は一定ですか。
01は数字文字列で
すか・桁数は一定ですか
(2)AAAの位置は浮動しますか。先頭文字から始まりますか。
(3)AAA1とあったりAAA01とあって、両者が同じとかは、ないでしょうね。
>コピーする
この表現は的波連れでは。
合算する。加算する。まとめるという表現が適当では。
ーーー
aaa121
bbb22
aaa233
cc14
aaa3415
aaaa121
10
10は =SUMIF(A1:A6,"aaa*",B1:B6)
という関数で出ます。
こういうのは使えませんか。
ぎりぎり関数でもできそうな、問題のように思いましたhが。
ーー
VBAでは
>文字列の部分一致
は(1)Instr関数
2)ワイルドカード
(3)その他
を使う、がありそうです。
No.6
- 回答日時:
一度も Excel は操作したことのない門外漢です。
そこで、ヘルプを手掛かりに質問者の要求に応えるであろうVBAコードに挑戦。
まあ、初挑戦ですから<決めうち>とはほど遠いでしょう。
<q_of_inventry.txt>
AAA01,10
AAA02,15
BBB01,5
BBB02,7
<Excel>
AAA____1
BBB____1
このような在庫表が存在するとします。
次のVBAの実行結果は、次のようです。
AAA___26
BBB___13
Option Explicit
Private Sub CommandButton1_Click()
Dim I As Integer
Dim N As Integer
Dim Datas() As String
Dim Goods As String
Dim Quantity As Long
Dim R As Range
With Worksheets(1).Range("a1:a500")
Datas() = FileReadArray("C:\Temp\q_of_inventory.txt")
N = UBound(Datas()) - 1
For I = 0 To N
Goods = CutStr(Datas(I), ",", 1)
Quantity = CutStr(Datas(I), ",", 2)
Set R = .Find(Goods, LookIn:=xlValues)
If Not R Is Nothing Then
Range(R.Address).Offset(0, 1) = Quantity
Else
MsgBox "[" & Goods & "] に対応する品番は、既存の在庫表に見つかりませんでした"
End If
Next I
End With
End Sub
Public Function GetGoodsName(ByVal Goods As String) As String
Dim NewGoods As String
NewGoods = Replace(Goods, "0", "")
NewGoods = Replace(NewGoods, "1", "")
NewGoods = Replace(NewGoods, "2", "")
NewGoods = Replace(NewGoods, "3", "")
NewGoods = Replace(NewGoods, "4", "")
NewGoods = Replace(NewGoods, "5", "")
NewGoods = Replace(NewGoods, "6", "")
NewGoods = Replace(NewGoods, "7", "")
NewGoods = Replace(NewGoods, "8", "")
NewGoods = Replace(NewGoods, "9", "")
GetGoodsName = NewGoods
End Function
.Find しか、ヘルプから見つけることが出来なかったということです。
FileReadArray()、CutStr()は、必要ならば補足します。
No.4
- 回答日時:
こんにちは。
補足を読みましたが、私の書いた内容が、ほとんど意味が通じていないようですね。
同じ内容を繰り返されても、話が進みません。それに、そのお書きになったマクロは、あまり役に立ちません。
・そのコード番号には規則がありますか?
・データを集計するための、元のリストはありますか?
もし、こちらの話が理解できないようでしたら、それは、CSV をインポートした後に、[並べ替え]してしまって、それで、COUNTIFやSUMIF などの関数を使って、数を抽出したほうが早いようです。
この回答への補足
>・そのコード番号には規則がありますか?
最初の3文字(AAA):薬品の種類
4文字目から5文字目(01):個体番号
という規則があります。つまり同じ種類の薬品が5本あれば"AAA05"のようになります。
>・データを集計するための、元のリストはありますか?
元リストはあります。
No.3
- 回答日時:
こんにちは。
現状の情報だけでは、VBAのコードを提供しても、キメウチの内容になって、無駄なコードの提供をしてしまうような気がします。もう少し、詳しく、自分で実際にどのようにしたら良いか組み立てたほうがよいと思います。具体的には、他の方がおっしゃるように、コードの比較の問題です。
AAA01
AAA02
BBB01
BBB02
文字-3個と、数字-2個というような、きちんとした規則があるなら、VBAで行うには、Dictionary オブジェクトという外部のオブジェクトを使うか、もしくは、1次元の配列で、ワークシートのMatch 関数を使うか、というような予測を立てています。
しかし、商品リストが予めあったほうが、楽ではないかと思います。その場合は、商品リストに当てはめていくような方法になるのだと思います。いずれにしても、これらのコードは、CSVファイル自体をインポートするわけではありません。そのコードを読んで、数量と思われる場所を読んでカウントします。
この回答への補足
在庫管理では、1000個程度の薬品に個別にバーコードを割り当てており、中には同じ種類のものが含まれています。個体を区別するために同じ種類でもそれぞれにコードを割り当てていますが、数量としては同じ種類のものの合計が欲しいのです。
ログデータとしては1000個程度のデータ(コード番号と数量)が順不同で羅列されますので、その中から同じ種類を表す"AAA"の部分が含まれる薬品の数量をコピーして別のエクセルファイルの特定のセルに加算することを考えています。
以下は現在作成途中のマクロの一部分ですが、これではコード番号が"AAA"の場合しか値をコピーしてくれません。これを「"AAA"を含むもの」として指定する方法をご教示下さい。
With LOGDATA
Dim i As Integer
For i = 1 To 1000
If Cells(i, 1).Value = ("AAA") Then
Cells(i, 2).Copy
ThisWorkbook.Worksheets(1).Range("H5").PasteSpecial Paste:=xlValues, Operation:=xlAdd
End If
No.2
- 回答日時:
具体的に何をしようとしているのかはわかりかねるのですが、
ある文字列の中に、別の文字列が含まれるかを判定する関数として、
VBAにはInstr関数があります。
http://officetanaka.net/excel/vba/tips/tips33.htm
ご参考まで。
No.1
- 回答日時:
>AAA01とAAA02は同じ種類なので、在庫数は転記先のエクセルファイルの同じセル内に数値を加算します。
AAA01とAAA02は 違うものです。
これが 同じならば 別のセルに AAA01とAAA02が同じものであるというしるしをつけたらいいでしょう。
そして そのしるしで集計すればいいですね。
たとえば 頭3文字をしるしとするならば
そのセルには
=LEFT(A1,3)
などという感じで入れればいいのです。
また
0AAA1
AAA01
01AAA
なども同じと見なす場合は、ちょっと難しいですね。
VBAとかを使ったらいいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで、シート間の転記するコードを教えてください。 4 2023/03/26 10:43
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- Excel(エクセル) Excel VBA 3 2023/04/22 10:46
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- Excel(エクセル) Powershell エクセル検索 完全一致の方法 1 2022/06/05 20:19
- Visual Basic(VBA) 別ブックからシートのコピー 3 2022/04/01 20:07
- Excel(エクセル) セルの値からファイルを複数作りたい 2 2022/10/06 12:42
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- JavaScript 指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードを教えてください 2 2023/04/27 17:58
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでエクセルシートを更新...
-
excelで、セル内に文字が入力さ...
-
エクセルのシートを同時に行削...
-
【エクセル】シートのロックで...
-
エクセルシートの統合
-
エクセルのチェックボックスを...
-
エクセルで最高値、最低値の日...
-
パソコンで購入したデーターが...
-
差し込み印刷に当日の日付が入...
-
「24日の0時」って・・・
-
「時間」、「期日」、「日付」...
-
日付の大小の表現
-
エクセルの列が左右逆に・・・・
-
ピボットテーブルの日付フィル...
-
Excel:セルに入力されている日...
-
Access 関数日付について
-
ACCESSで1月1日~12月31日まで...
-
Excel関数 「日付を入力...
-
エクセルでのNULLという文字列...
-
エクセルでのセルをまたぐ文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでエクセルシートを更新...
-
excelで、セル内に文字が入力さ...
-
エクセルのシートを同時に行削...
-
【エクセル】シートのロックで...
-
表示倍率を変更させない方法
-
エクセルの担当者別にシートを...
-
エクセルで、2つのシートにある...
-
エクセルで別シート、または別...
-
エクセルのマクロ。 お世話にな...
-
エクセルVBAでデータ検索について
-
同一セルに入力規則のリストと...
-
エクセルシートの統合
-
STAT VIEWが使えない!!!
-
旬ごとの集計方法
-
ファイナンシャルプランナーの...
-
エクセル◎○の人は、一つ昇格し...
-
エクセルVBAで65536レコードを...
-
エクセルで、作った年間カレン...
-
教えてください!エクセルのシ...
-
シートを串刺しで抽出したいの...
おすすめ情報