アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel2003を使用しています。

CSVでExcelに取り込んだデータの中から、条件を満たすものを順に抽出して一覧表を作成するマクロを作りたいのですが。。。

・Sheet2のB列に“コード”と入力されている行のC列のデータ → Sheet1のC列2行目以下
・Sheet2のC列に“合計”と入力されている行のD列のデータ → Sheet1のD列2行目以下

に順に表示させたいのですが、うまくいきません。
以前、いただいた回答で参考になりそうなものを見てみたのですが、手順というか何かヒントのようなものをいただけたら、自分でどうにかできそうなので、質問させていただきました。
よろしくお願いします。

A 回答 (2件)

Sheets("Sheet2").Cells(i,2)が"コード"ならSheets("Sheet1").Cells(j,3)=Sh

eets("Sheet2").Cells(i,3)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

質問文に詳しく記載しておけばよかったのですが、条件の部分(回答をいただいた部分)は分かりますので、同様に書いています。
ループさせて、Sheet1の2行目以下に順に、該当のデータを表示させるところがうまくいっていない(?)ようでして、ループのさせ方を教えていただけないでしょうか?

再度の質問で恐れ入りますが、よろしくお願いします。

お礼日時:2007/11/20 12:04

こんにちは。



ご質問が、分かりにくいのです。

>・Sheet2のB列に“コード”と入力されている行のC列のデータ → Sheet1のC列2行目以下
>・Sheet2のC列に“合計”と入力されている行のD列のデータ → Sheet1のD列2行目以下

これが、横並びするものか、それとも、別々のものかということです。横並びするにしても、必ず、コードと合計が一対にならないこともあるとか、話が複雑なこともあります。

そういう場合、次の「コード」という文字が現れるのを、トリガーにして、前のデータの書き出しするとか、それぞれ現れたら、別々にSheet1 のC列・D列に順送りしてよいのか、そういうところが見えてきません。

また、CSVというのにも関わらず、同じデータフィールドに、数値と文字列の混在があるように思います。そういうのを単純に考えてよいのか、いろんなことを考えてしまいます。

通常は、別々に考えるなら、ローテクですが、以下のようにすれば、良いわけですが……。

Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
Dim i As Long
Dim j As Long

Set Sh1 = Worksheets("Sheet1")
Set Sh2 = Worksheets("Sheet2")

j = 2
k = 2 '初期値
With Sh2
For i = 1 To .Range("B65536").End(xlUp).Row
  If .Cells(i, 2).Value Like "*コード*" Then
   Sh1.Cells(j, 3).Value = .Cells(i, 3).Value
   j = j + 1
  End If
 
  If .Cells(i, 3).Value Like "*合計*" Then
   Sh1.Cells(k, 4).Value = .Cells(i, 4).Value
   k = k + 1
  End If
Next i
End With
    • good
    • 0
この回答へのお礼

Wendy02 さん、こんにちは。
回答ありがとうございます。

まず、説明不足で申し訳ありません。
「CSVでExcelに取り込んだデータ」というのは、会社で使用しているシステムからCSV出力 → Excelに取り込んだデータでして、抽出するデータ部分については、数値と文字列の混在はない状態です。

このデータの状態をみて、“コード”と“合計”は入力されている列は違うものの、交互に現れるので、この規則性を利用して、それぞれSheet1 のC列・D列に順送りすれば、一覧表が作成できると考えたわけです。

おかげさまで、無事データを順に表示させることができました。
ループが複数であったり、条件があったりすると、まだうまくコードを書くことができません(>_<)
参考書を読んだり、以前ここで教えていただいたコードを参考にしたり、試行錯誤していますが、まだまだです(^^ゞ

ありがとうございました!

お礼日時:2007/11/20 13:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!