Excel VBA質問箱 IV

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

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


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

【20099】列の結合について タヌキ 04/11/28(日) 7:04 質問[未読]
【20100】Re:列の結合について ichinose 04/11/28(日) 10:02 回答[未読]
【20112】Re:列の結合について タヌキ 04/11/28(日) 18:36 質問[未読]
【20113】Re:列の結合について かみちゃん 04/11/28(日) 19:05 回答[未読]
【20120】Re:列の結合について タヌキ 04/11/28(日) 22:21 お礼[未読]

【20099】列の結合について
質問  タヌキ  - 04/11/28(日) 7:04 -

引用なし
パスワード
   もしわかる方がいらしたら是非教えてください。

 A B C........Z
1 ☆ ★
2 ▼ ○
3 ※ ◇
4
:
:

と、なっているものを

 A B C........Z
1 ☆
2 ▼
3 ※
4 ★
5 ○
6 ◇

というふうにA列にB列を足すコードを教えてください。

【20100】Re:列の結合について
回答  ichinose  - 04/11/28(日) 10:02 -

引用なし
パスワード
   ▼タヌキ さん:
おはようございます。

>もしわかる方がいらしたら是非教えてください。
>
> A B C........Z
>1 ☆ ★
>2 ▼ ○
>3 ※ ◇
>4
>:
>:
>
A列、B列、・・・の全ての列に入力されているデータ行数が3行なら
もっと簡単なのですが・・・。

>と、なっているものを
>
> A B C........Z
>1 ☆
>2 ▼
>3 ※
>4 ★
>5 ○
>6 ◇
>
>というふうにA列にB列を足すコードを教えてください。

上記のシートをアクティブにして以下のコードを試してみて下さい。
'===========================================================
Sub main()
  Dim limc As Long
  Dim strow As Long
  Dim r_cnt As Long
  limc = Cells(1, Columns.Count).End(xlToLeft).Column
  strow = Cells(Rows.Count, 1).End(xlUp).Row + 1
  For idx = 2 To limc
   r_cnt = Cells(Rows.Count, idx).End(xlUp).Row
   With Range(Cells(1, idx), Cells(r_cnt, idx))
    Range(Cells(strow, 1), Cells(strow + r_cnt - 1, 1)).Value = _
        Range(Cells(1, idx), Cells(r_cnt, idx)).Value
    .Value = ""
    End With
   strow = strow + r_cnt
   Next
End Sub

【20112】Re:列の結合について
質問  タヌキ  - 04/11/28(日) 18:36 -

引用なし
パスワード
   ichinoseさん、こんにちは。ありがとうございました。

ichinoseさんの教えてくれたコードで実行することができました。

そしてまたお聞きしたいのですが、B列ではなくF列をA列に足すときは

どこをどう変えたらいいでしょうか?

【20113】Re:列の結合について
回答  かみちゃん  - 04/11/28(日) 19:05 -

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

横から失礼します。

>そしてまたお聞きしたいのですが、B列ではなくF列をA列に足すときは
>
>どこをどう変えたらいいでしょうか?

ichinoseさんが提示されたコードは、B列から1行目の最右端列までの列すべてを処理対象としています。
これをF列からとするには、
  For idx = 6 To limc
とします。

なお、解説は、以下のとおりです。

Option Explicit

Sub main()
  Dim limc As Long, idx As Long
  Dim strow As Long
  Dim r_cnt As Long
   
  '1行目の最右端のセルの列番号を取得
  '取得した列までを繰り返して処理する
  limc = Cells(1, Columns.Count).End(xlToLeft).Column
  '1列目(A列)の最下行の次行の行番号を取得
  '取得した行を2列目(B列)以降各列の貼り付け開始位置とする。
  strow = Cells(Rows.Count, 1).End(xlUp).Row + 1
  '2列目(B列)から1行目の最右端の列番号までを1列ずつ処理する。
  For idx = 2 To limc
   '処理対象列の最下行を取得する。
   r_cnt = Cells(Rows.Count, idx).End(xlUp).Row
   '1行目から処理対象列の最下行までの値を
   '1列目の貼り付け開始位置から処理対象行数の範囲に貼り付ける
   Range(Cells(strow, 1), Cells(strow + r_cnt - 1, 1)).Value = _
       Range(Cells(1, idx), Cells(r_cnt, idx)).Value
   '処理対象範囲をクリアする。
   Range(Cells(1, idx), Cells(r_cnt, idx)).ClearContents
   '貼り付け開始位置をずらす
   strow = strow + r_cnt
  Next
End Sub

【20120】Re:列の結合について
お礼  タヌキ  - 04/11/28(日) 22:21 -

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

解決しました。ありがとうございました。

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