![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
在庫管理のため、バーコードハンディターミナルで収集した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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでエクセルシートを更新...
-
同一セルに入力規則のリストと...
-
エクセルのCSVについて
-
excelで、セル内に文字が入力さ...
-
「24日の0時」って・・・
-
履歴書の日付間違いで落ちますか。
-
「時間」、「期日」、「日付」...
-
回覧板の日付について質問です...
-
パソコンで購入したデーターが...
-
Excel 隣のセルが空白以外の場...
-
コンピューターで2進法が採用...
-
結合されたセルに貼り付けたU...
-
wordで変な位置で改行されます...
-
エクセルで当月の数字を入力し...
-
エクセルで数字から名前に変...
-
エクセルで日付別にシートを分...
-
DIORのオンラインショップの購...
-
大至急! ユニバに詳しい方回答...
-
日付の大小の表現
-
エクセルで最高値、最低値の日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでエクセルシートを更新...
-
excelで、セル内に文字が入力さ...
-
エクセルのシートを同時に行削...
-
【エクセル】シートのロックで...
-
表示倍率を変更させない方法
-
エクセルの担当者別にシートを...
-
エクセルVBAで65536レコードを...
-
Excelのマクロで、開いた時に、...
-
エクセル◎○の人は、一つ昇格し...
-
エクセルVBAでデータ検索について
-
同一セルに入力規則のリストと...
-
エクセルで別シート、または別...
-
Excelで、表に小計と合計を入れ...
-
エクセルシート内データの保護
-
エクセルVBAの文字列の部分一致...
-
エクセルで、2つのシートにある...
-
ホームページビルダーv10でエク...
-
エクセルのCSVについて
-
STAT VIEWが使えない!!!
-
エクセルで更新日時を表示したい。
おすすめ情報