Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8063 / 13644 ツリー ←次へ | 前へ→

【35317】表の作り変え」 rough4744 06/2/26(日) 15:40 質問[未読]
【35319】Re:表の作り変え かみちゃん 06/2/26(日) 16:17 回答[未読]
【35321】Re:表の作り変え rough4744 06/2/26(日) 17:27 質問[未読]
【35323】Re:表の作り変え かみちゃん 06/2/26(日) 17:36 発言[未読]
【35327】Re:表の作り変え rough4744 06/2/26(日) 18:23 お礼[未読]

【35317】表の作り変え」
質問  rough4744  - 06/2/26(日) 15:40 -

引用なし
パスワード
   皆さんにはには簡単かもしれませんが、教えてください。
 今、A・B・C・D列あるデータ表(1)があり、A列には日付、B列からD列までにはA列の日付(例:2月1日)の日のデータが数字で入っています。以下の行には1行目以降の(例:2月2日〜)日付のデータが入っています。
データが(不定期)たまった処で、データを縦書きのデータ表(2)に呼び込みたいのです。
 表(2)は、3列になっていて便宜上X・Y・Z列とします。
 まず、Y列には表(1)のA列の日付を呼び込み。
 Z列には表(1)のB・C・D列のデータを呼び込みたいのですが、B列には必ずデータがありますが、C・D列にはデータがあったり無かったりしますので、1日分が必ずしも3行になりません。しかし2日目以降のデータは行をつめて呼び込みたいのです。
 そして、Z列に呼び込んだデータによって、X列に整理番号を以下の通り表示したいのです。
 表(1)のB列のデータを呼び込んだときは「1」を、C列のであれば「2」を、D列は「3」と整理番号を付けることにしたいのです。

   A   B   C    D      <出来上がり>
  2月1日 100  50          1  2月1日 100
  2月2日 200         →   2  2月1日  50
  2月3日 300      30       1  2月2日 200
                    1  2月3日 300
                    3  2月3日  30

宜しくお願いいたします。

【35319】Re:表の作り変え
回答  かみちゃん E-MAIL  - 06/2/26(日) 16:17 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>皆さんにはには簡単かもしれませんが、教えてください。

私にとって、簡単ではありませんでしたが、

>   A   B   C    D      <出来上がり>
>  2月1日 100  50          1  2月1日 100
>  2月2日 200         →   2  2月1日  50
>  2月3日 300      30       1  2月2日 200
>                    1  2月3日 300
>                    3  2月3日  30

以下のような感じででました。(Excel2002 SP3 で動作確認すみ)

Sub Macro1()
 Dim vntData As Variant
 Dim rngList As Range
 Dim RowNo As Long
 Dim ColumnNo As Integer
 Dim MaxRowNo As Long
 Dim i As Integer
 Const OutColumnNo As Integer = 24 '出力開始列番号(24列=X列)
 
 Set rngList = Range("A1")
 
 MaxRowNo = Cells(65536, rngList.Column).End(xlUp).Row
 For RowNo = 1 To MaxRowNo
  ColumnNo = Cells(rngList.Offset(RowNo - 1).Row, OutColumnNo - 1).End(xlToLeft).Column
  vntData = rngList.Offset(RowNo - 1).Resize(, ColumnNo).Value
  Debug.Print UBound(vntData, 2)
  For i = 2 To UBound(vntData, 2)
   If vntData(1, i) <> "" Then
    Cells(65536, OutColumnNo).End(xlUp).Offset(1).Resize(, 3).Value = Array(i - 1, vntData(1, 1), vntData(1, i))
   End If
  Next
 Next
 MsgBox "処理を終了しました。"
End Sub

【35321】Re:表の作り変え
質問  rough4744  - 06/2/26(日) 17:27 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>皆さんにはには簡単かもしれませんが、教えてください。
>
>私にとって、簡単ではありませんでしたが、
>
>>   A   B   C    D      <出来上がり>
>>  2月1日 100  50          1  2月1日 100
>>  2月2日 200         →   2  2月1日  50
>>  2月3日 300      30       1  2月2日 200
>>                    1  2月3日 300
>>                    3  2月3日  30
>
>以下のような感じででました。(Excel2002 SP3 で動作確認すみ)
>
>Sub Macro1()
> Dim vntData As Variant
> Dim rngList As Range
> Dim RowNo As Long
> Dim ColumnNo As Integer
> Dim MaxRowNo As Long
> Dim i As Integer
> Const OutColumnNo As Integer = 24 '出力開始列番号(24列=X列)
> 
> Set rngList = Range("A1")
> 
> MaxRowNo = Cells(65536, rngList.Column).End(xlUp).Row
> For RowNo = 1 To MaxRowNo
>  ColumnNo = Cells(rngList.Offset(RowNo - 1).Row, OutColumnNo - 1).End(xlToLeft).Column
>  vntData = rngList.Offset(RowNo - 1).Resize(, ColumnNo).Value
>  Debug.Print UBound(vntData, 2)
>  For i = 2 To UBound(vntData, 2)
>   If vntData(1, i) <> "" Then
>    Cells(65536, OutColumnNo).End(xlUp).Offset(1).Resize(, 3).Value = Array(i - 1, vntData(1, 1), vntData(1, i))
>   End If
>  Next
> Next
> MsgBox "処理を終了しました。"
>End Sub
早速の回答ありがとうございます。
知識不足で申し訳ありませんが、表(1)と表(2)の位置関係をどうすれば回答いただいたVBAと照合するのかが解らず動作が確認できませんでした。
例えば、表(1)は、A列をrange"A1"から始めて、2行目からデータが記入されているとし,表(2)は同じシートのrange"F1"をX列としてやはり2行目からデータを入力して行くとすると上記のVBAはどこをどう変更すればいいでしょうか

【35323】Re:表の作り変え
発言  かみちゃん  - 06/2/26(日) 17:36 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>表(1)と表(2)の位置関係をどうすれば回答いただいたVBAと照合するのかが解らず動作が確認できませんでした。

お手元のシートで動作確認されましたか?
ご提示された仕様とおりに出力されることを確認していますが・・・

>例えば、表(1)は、A列をrange"A1"から始めて、2行目からデータが記入されているとし,表(2)は同じシートのrange"F1"をX列としてやはり2行目からデータを入力して行くとすると上記のVBAはどこをどう変更すればいいでしょうか

A列をRange"A1"から始めて、2行目からデータが記入
Range"F1"をX列としてやはり2行目からデータを入力
ということは、初めて聞いたような気がします。

私が提示したコードは、
A列をRange"A1"からデータが記入
Range"X1"をX列(24列目)として2行目からデータを出力
ということになっています。

これで少し考えてみていただいて、どうしてもわからなければ、再度ご質問ください。

【35327】Re:表の作り変え
お礼  rough4744  - 06/2/26(日) 18:23 -

引用なし
パスワード
   ありがとうございました。動作確認できました。
細部は、自分でよく考えて応用できるようにしたいと思います。
本当う有難うございました。

8063 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free