Excel VBA質問箱 IV

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

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


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

【41492】次々データ範囲を取得するには okuno 06/8/12(土) 4:26 質問[未読]
【41493】Re:次々データ範囲を取得するには SS 06/8/12(土) 7:31 発言[未読]
【41497】Re:次々データ範囲を取得するには okuno 06/8/12(土) 9:55 質問[未読]
【41499】Re:次々データ範囲を取得するには かみちゃん 06/8/12(土) 10:03 発言[未読]
【41498】Re:次々データ範囲を取得するには かみちゃん 06/8/12(土) 9:59 回答[未読]
【41533】Re:次々データ範囲を取得するには okuno 06/8/12(土) 22:26 お礼[未読]

【41492】次々データ範囲を取得するには
質問  okuno  - 06/8/12(土) 4:26 -

引用なし
パスワード
   こんばんは。ひとつご質問させていただきます。

    A   B   C   
 1 (号車) (個数) (単価)
 2  2   4  100
 3  2   1  150
 4  4   6  120
 5  4   3  100
 6  5   1  180
 7  5   1  180
 8  5   4  150
 9  5   4  150
10  5   4  130
11  6   4  140
12  6   4  150
13  7   4  170
 

このようなワークシートに入力された数値があったとします。
それぞれの車の個数と単価を合計していく為に、車ごとにデータ範囲を
取得して2号車はdataList1、4号車はdataList2・・・と取得したい思います。


forで下がって、号車が同じ所のセルの番号を用いて
set dataList1=Activesheet.cells(,)・・・
とすれば良いのかと思いますが、アイデアが浮かびません。。。

どなたか、良い方法はございませんでしょうか。
宜しくお願いいたします。

【41493】Re:次々データ範囲を取得するには
発言  SS  - 06/8/12(土) 7:31 -

引用なし
パスワード
   ▼okuno さん:

おはようございます。

少し意味が分かりませんが・・・
号車に対応した個数(台数?のことでしょうか)の一覧=dataListが1から順に
別のシート(たとえばシート3)に作成されていると言う意味でしょうか?
もしそれであればVLookUp関数で対応できると思いますが・・・

VBAを使うということですとA列で検索をかけて、dataListから抽出するように
されるとできるでしょう。

できましたら、準備されたシート(未完シート)と完成させたシートの状態を
明示され、参照シートも掲載されると更に回答が精度が上がると思います。

【41497】Re:次々データ範囲を取得するには
質問  okuno  - 06/8/12(土) 9:55 -

引用なし
パスワード
   ▼SS さん:
おはようございます。
朝早くからありがとうございます。

すみません、解りづらい表現になってしまいました。
シートに貼り付けるではなく、dataListとはVBA実行中に、
2次元配列というのでしょうか、各号車毎に(号車)〜(単価)の
範囲にあるセルの値だけ取得して、VBAの中で使用したいという事なんです。

例えば2号車ですと A2:C3 までの値をdataList1に
   4号車ですと A4:C5 までの値をdataList2
   5号車ですと A6:C10 までをdataList3に
格納したいのです。

その時にfor next等を使ってVBAでこなそうと思うのですが、そのコードが書けません・・・。

最終的にはApplication.Transpose などで、シートに値を貼り付けます。
これでお分かり頂けますでしょうか。

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

【41498】Re:次々データ範囲を取得するには
回答  かみちゃん  - 06/8/12(土) 9:59 -

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

>このようなワークシートに入力された数値があったとします。
>それぞれの車の個数と単価を合計していく為に、車ごとにデータ範囲を
>取得して2号車はdataList1、4号車はdataList2・・・と取得したい思います。
>
>
>forで下がって、号車が同じ所のセルの番号を用いて
>set dataList1=Activesheet.cells(,)・・・
>とすれば良いのかと思いますが、アイデアが浮かびません。。。

号車順にソートされていることが前提となりますが、
以下のようなコードが参考になりますでしょうか?

Sub Test()
 Dim LastCell As Range
 Dim c As Range
 Dim vntArea() As Range
 Dim tmpKey As String
 Dim rngStart As Range
 Dim i As Integer
 
 Set LastCell = Cells(Cells.Rows.Count, 1).End(xlUp)
 Set rngStart = Nothing
 i = 0
 
 ReDim vntArea(Range("A2", LastCell).Count)
 
 For Each c In Range("A2", LastCell)
  If tmpKey <> c.Value Then
   If Not rngStart Is Nothing Then
    Set vntArea(i) = Range(rngStart, c.Offset(-1))
    i = i + 1
   End If
   Set rngStart = c
   tmpKey = c.Value
  End If
  If LastCell.Address = c.Address Then
    Set vntArea(i) = Range(rngStart, c)
    i = i + 1
  End If
 Next
 
 ReDim Preserve vntArea(i)
 For i = 0 To UBound(vntArea) - 1
  MsgBox "dataList" & i + 1 & "=" & vntArea(i).Address
 Next

End Sub

【41499】Re:次々データ範囲を取得するには
発言  かみちゃん  - 06/8/12(土) 10:03 -

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

>シートに貼り付けるではなく、dataListとはVBA実行中に、
>2次元配列というのでしょうか、各号車毎に(号車)〜(単価)の
>範囲にあるセルの値だけ取得して、VBAの中で使用したいという事なんです。
>
>例えば2号車ですと A2:C3 までの値をdataList1に
>   4号車ですと A4:C5 までの値をdataList2
>   5号車ですと A6:C10 までをdataList3に
>格納したいのです。

入れ違いかもしれませんが、
[#41498]で提示したコードの
Set vntArea(i) = Range(rngStart, c.Offset(-1))

Set vntArea(i) = Range(rngStart, c.Offset(-1)).Resize(, 3)
に、
Set vntArea(i) = Range(rngStart, c)

Set vntArea(i) = Range(rngStart, c).Resize(, 3)
とすれば、配列vntAreaに格納されると思います。

【41533】Re:次々データ範囲を取得するには
お礼  okuno  - 06/8/12(土) 22:26 -

引用なし
パスワード
   ▼かみちゃん さん:

朝早くからありがとうございました。
みなさんのご好意により、無事進み出す事ができました。
まだまだ、いろいろな考え方ができるんだなと感心しきりです。

本当にありがとうございました。

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