Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2013)
繰り返し処理
投稿日時: 19/07/18 16:04:37
投稿者: shamo

お世話になります。
複数のCSVファイルを1シートにまとめた下記のようなものがあります。
実際は空白行があったりと不規則で、15万行程あります。
 
B列に「===店番号===」と言う文字があり、その1つ下の
セルに「店番号」が入っております。
 
その店番号をF列に代入したいのですが
こういう場合どういう考えをすればいいのでしょうか。
 
考え方だけでもご教授していただけると助かります。
 
===店番号===
11
 
9 190304 1000 0 0 11
2 190601 1800 2 1 11
 
===店番号===
11
 
9 190304 1000 0 0 11
2 190601 1800 2 1 11
 
===店番号===
12
 
9 190304 1000 0 0 12
2 190601 1800 2 1 12
 
===店番号===
12
 
9 190304 1000 0 0 12
2 190601 1800 2 1 12
 
===店番号===
13
 
9 190304 1000 0 0 13
2 190601 1800 2 1 13

回答
投稿日時: 19/07/18 16:24:08
投稿者: WinArrow
投稿者のウェブサイトに移動

掲示の形態は、1つのCSVファイルの中の話なのか?
1つのCSVファイルの中に
先頭の1件が「店番号」ということなのか?
 
「店番号」はどのように判別するおでしょうか?
 
もう一つ
CSVファイルの取込コードはできているのですか?

回答
投稿日時: 19/07/18 16:30:01
投稿者: WinArrow
投稿者のウェブサイトに移動

ごめんなさい。
 
CSVを取り込んだシートがある
という前提の話だとしたら、
この際、CSVは関係ありませんね・・・
 
Do〜Loopを使えばよいと思います。
その中で、==店番号==という文字列を判断して
次の行の「店番号:」を記憶し、
データ行(判別方法は、貴方が考えてください)のF列セルへ、代入する
というコードを作成すればよいでしょう。

回答
投稿日時: 19/07/18 16:49:11
投稿者: mattuwan44

>考え方だけでもご教授していただけると助かります。
 
1)シート上に空白行で区切られた、いくつかのデータの塊がある。
2)そのデータの塊には、「===店番号===」という文字列が入っている塊と、
そうでない塊がある
3)「===店番号===」という文字列が入っている塊の中の店番号を、
次のデータの塊の最終列の右に転記したい
 
ということですかね?
 
そうならば、
ジャンプ機能で値のあるセル範囲を検索し、
その飛び飛びのセル範囲をAreasで巡回し、転記すればいいと思います。
 
このような説明でわかりますでしょうか?

回答
投稿日時: 19/07/18 16:57:29
投稿者: Suzu

考え方?手動にて行う場合、どのように判断しているのかそれを表すだけですよ。
 
 

	A	B	C	D	E	F
1		===店番号===				
2		11				
3						
4	9	190304	1000	0	0	11
5	2	190601	1800	2	1	11

 
こんなだとして、
 
・数式で処理
・VBAで処理
 
数式なら、
A列に値があれば、F列前行の値を参照。
           F列が空白なら 3行前のB列の値を参照
                     3行前のB列の値「===店番号===」なら、2行前のB列の値参照
                     3行前のB列の値「===店番号===」でないなら、2行前のB列の値参照
                              2行前のB列の値参照「===店番号===」なら、1行前のB列の値参照
の様な関数を IFでどうぞ。
 
VBAなら、同じ様に、A列の値を参照し、値があるなら F列に値を代入。
   代入する値は、F列 前行に値があれば、その値を。
        無い場合は、その行から上の行 10行分くらいのB列の値から「===店番号===」検索し
             ヒットした行の次の行の B列の値を代入。
 
あとは、どちらの実行が速いか。テストをしてみてでしょうか。

投稿日時: 19/07/18 17:55:35
投稿者: shamo

沢山のお返事ありがとうございます。
 
繰り返し処理(For、Do whileなど)使い慣れて無いので
これから1つづつ確認してみようと思います。
 
また躓いたらご教授して頂けると幸いです。
 
本当にありがとうございました!