プロが教える店舗&オフィスのセキュリティ対策術

例)A列 B列 C列 D列 ⇒(データをまとめる)⇒E列
列名  ①  ②  ③ ④
データ 0  1  0 1⇒(データをまとめる)⇒2,4

上記のように、左側のA列~D列のようにあるデータをE列のようにしたい場合、
VBAでどのように記述したら宜しいでしょうか?

膨大なデータ加工が発生してしまい、解析ソフトだけでデータを読み込めない量で
加工が厳しいのでどなたかわかる方がいらっしゃいましたら教えてもらえますでしょうか。

宜しくお願いします。

質問者からの補足コメント

  • 早速の回答ありがとうございました。
    文字数オーバーのため、別項目を立ててお礼と再度確認したい内容について投稿させて頂きました。
    宜しくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/01/22 11:38

A 回答 (2件)

No.1です。


質問に対して・・・

① 初期値は設定しなくても良いのですか?
確かに丁寧にやれば初期値は設定してやるのが良いのでしょうね。

ただ変数の初期値として
Integer型や Long型であれば、0
Boolean型であれば、False
String型であれば、""
(厳密にいえばString型は結構ややこしいみたいです)
等々

という認識がありますので、敢えて初期値は設定していませんでした。

② Cells(i, "E").ClearContents
なぜクリアするのか?という件ですが、
データ変更があった場合に対応させるためでした。
データ変更はないのであれば前回の
>Else
>Cells(i, "E").ClearContents
の2行は不要です。

この程度でよろしいでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

質問に対しても丁寧に回答して頂きましてありがとうございました。
大変助かりました。
勉強になりました。
また機会がありましたら、宜しくお願いします。

お礼日時:2016/01/25 09:56

こんにちは!



↓のような感じでよいのであれば・・・

Sub Sample1()
Dim i As Long, j As Long, myStr As String
Application.ScreenUpdating = False
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
For j = 1 To 4
If Cells(i, j) <> 0 Then
myStr = myStr & j & ","
End If
Next j
If Len(myStr) > 0 Then
Cells(i, "E") = Left(myStr, Len(myStr) - 1)
Else
Cells(i, "E").ClearContents
End If
myStr = ""
Next i
Application.ScreenUpdating = True
End Sub

これではどうでしょうか?m(_ _)m
「【Excelマクロ】複数列にまたがったデ」の回答画像1
この回答への補足あり
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました!
ちょっと確認させてください。

myStr = myStr & j & ","

こちらは、初期値は設定しなくても良いのですか?
例えば1行目の場合、myStrは何も入っていない箱だと思うので、
初期値が必要なのではと思ったりもしましたが・・・。

If Cells(i, j) <> 0 Then
myStr = myStr & j & ","

これは、セルの値が0でなければ、どんどんカンマ区切りでつなげていく操作をしていますね。

If Len(myStr) > 0 Then
Cells(i, "E") = Left(myStr, Len(myStr) - 1)

結合したものの文字数をカウントして、0より大きければ、
結合されたものは最後に「,」が入ってるから最後から1文字削除したものをE列に入れる操作ですね。

Cells(i, "E").ClearContents

こちらは、

If Len(myStr) > 0 Thenで判定した結果、文字列の長さが0だった場合にコンテンツをクリアすることだと思いますが、
何故クリアするのですか?

全てが「0」でもmyStrには何か入ってる状態だから、コンテンツをクリアするということですか?
もしかしたら、最初に確認させてもらったところにつながる内容かもしれませんが。
(myStr = myStr & j & "," ←これについて初期値は設定しなくて良いですか?という質問につながるような・・・)

以上、宜しくお願いします。

お礼日時:2016/01/22 11:36

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