Excel VBA質問箱 IV

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

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


5431 / 13646 ツリー ←次へ | 前へ→

【50832】表から表を編集するコーディング方法について KTTK 07/8/17(金) 15:00 質問[未読]
【50837】Re:表から表を編集するコーディング方法に... ichi 07/8/17(金) 16:22 発言[未読]
【50840】Re:表から表を編集するコーディング方法に... KTTK 07/8/17(金) 18:57 お礼[未読]
【50838】Re:表から表を編集するコーディング方法に... ichinose 07/8/17(金) 16:25 発言[未読]
【50841】Re:表から表を編集するコーディング方法に... KTTK 07/8/17(金) 19:04 お礼[未読]

【50832】表から表を編集するコーディング方法につ...
質問  KTTK  - 07/8/17(金) 15:00 -

引用なし
パスワード
   以下のような表1から表2への編集を考えています。
VBAでどのようにコーディングすれば良いのでしょうか?
色々と試行錯誤を重ねてみましたが、技をあまり知らないため
うまく出来ません。
ご指導をお願いいたします。

表1
  項目1 項目2 項目3 項目4
A  7    5         3  
B  2   22    8    7 
C  33
・・・

表2
  項目
A  7 
A  5
A 
A  3
B  2
B  22
・・・
表1の項目は10個で固定です。
Aを10件作成後、Bを10件、Cを10件というように
編集をしたいと思っています。
また、このようなコーディングの知識を身につけるための
良い方法(WEB、教本等)がありましたらお教え下さい。

以上、よろしくお願いいたします。

【50837】Re:表から表を編集するコーディング方法...
発言  ichi  - 07/8/17(金) 16:22 -

引用なし
パスワード
   ▼KTTK さん:
表1のデータを2次元配列に格納します。
ここではこのように書きますが、実際はfor next文でやるほうがよい

dim d(3,10) as variant
d(1,0)=A  'A0
d(1,1)=7  'A1
d(1,2)=5  'A2
.
.
d(2,0)=B  'B0
d(2,1)=2  'B1
.
.
d(3,0)=C  'C0
d(3,1)=33  'C1
.
.
というふうに。
そして表2のように表記するには
k=0
for i=1 to 3
 for j=0 to 10
  k=k+1
   Cells(k,1)=d(i,0)
   Cells(k,2)=d(i,j)
 next j
next i
としてはどうですか?


>>  項目1 項目2 項目3 項目4
>A  7    5         3  
>B  2   22    8    7 
>C  33
>・・・
>
>表2
>  項目
>A  7 
>A  5
>A 
>A  3
>B  2
>B  22
>・・・
>表1の項目は10個で固定です。
>Aを10件作成後、Bを10件、Cを10件というように
>編集をしたいと思っています。
>また、このようなコーディングの知識を身につけるための
>良い方法(WEB、教本等)がありましたらお教え下さい。
>
>以上、よろしくお願いいたします。

【50838】Re:表から表を編集するコーディング方法...
発言  ichinose  - 07/8/17(金) 16:25 -

引用なし
パスワード
   ▼KTTK さん:
こんにちは。

>以下のような表1から表2への編集を考えています。
>VBAでどのようにコーディングすれば良いのでしょうか?
>色々と試行錯誤を重ねてみましたが、技をあまり知らないため
>うまく出来ません。

次回は、「このうまく出来ない」を具体的に説明してください。
(こんなプログラムを作りましたが、結果は、このようになってしまいます云々)

でも、入力データと出力データの説明は良いですね!!


>
表1 Sheet1

    A  B   C  D   E
 1    項目1 項目2 項目3 項目4
 2  A  7    5         3  
 3  B  2   22    8    7 
 4  C  33
 5  ・・・


上記の表1がSheet1というシートのセルA1から記述されているとします。


>
>表2
>  項目
>A  7 
>A  5
>A 
>A  3
>B  2
>B  22
>・・・

結果は、Sheet2というシートに出力します。

Sheet2は、空のシートを用意して置いてください。


>表1の項目は10個で固定です。
>Aを10件作成後、Bを10件、Cを10件というように
>編集をしたいと思っています。


標準モジュールに
'=============================================================
Sub test()
  Dim g0 As Long
  Dim cl As Long
  Dim rng As Range
  With Worksheets("sheet1")
    Set rng = .Range("b2", .Cells(.Cells(.Rows.Count, "a").End(xlUp).Row, _
        .Cells(1, .Columns.Count).End(xlToLeft).Column))
    cl = rng.Columns.Count
    End With
  With Worksheets("sheet2")
    .Range("b1").Value = "項目"
    For g0 = 1 To rng.Rows.Count
     With .Range(.Cells((g0 - 1) * cl + 2, 1), .Cells(g0 * cl + 1, 1))
       .Value = rng.Rows(g0).Cells(0).Value
       .Offset(0, 1).Value = Application.Transpose(rng.Rows(g0))
       End With
     Next
    End With
End Sub


testを実行して試してみてください。
尚、最初は、新規ブックにてサンプルデータを作成して確認することから
はじめて下さい。

【50840】Re:表から表を編集するコーディング方法...
お礼  KTTK  - 07/8/17(金) 18:57 -

引用なし
パスワード
   ▼ichi さん:
ご回答有難う御座いました。
for next文の2階層でやるイメージは掴めていたのですが、
いざコーディングすると手が動かない状態でしたので、
大変参考になりました。
有難う御座いました。

【50841】Re:表から表を編集するコーディング方法...
お礼  KTTK  - 07/8/17(金) 19:04 -

引用なし
パスワード
   ▼ichinose さん:
ご回答有難う御座いました。
標準モジュールとして記載して頂いたもの、
凄いワザのオンパードですね。
自分自身は新たにコーディングするのはなかなか発想が出てこないのですが、
人が作ったものは見て大体は理解できると思っていましたが、
この標準モジュールは凄いですね。まだすべて理解できていませんが、
確かにこれで、動いちゃいますね。ビックリ!!
全体を理解するにはもう少し時間がかかると思いますが、
頑張って理解してみようと思います。
どうも有難う御座いました。

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