Excel VBA質問箱 IV

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

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


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

【68422】表をリスト形式に整える はなかっぱ 11/3/3(木) 20:26 質問[未読]
【68423】Re:表をリスト形式に整える kanabun 11/3/4(金) 0:15 発言[未読]
【68424】Re:表をリスト形式に整える kanabun 11/3/4(金) 0:20 発言[未読]
【68427】Re:表をリスト形式に整える はなかっぱ 11/3/4(金) 20:41 質問[未読]
【68428】Re:表をリスト形式に整える kanabun 11/3/4(金) 21:06 発言[未読]
【68430】Re:表をリスト形式に整える はなかっぱ 11/3/4(金) 23:18 お礼[未読]

【68422】表をリスト形式に整える
質問  はなかっぱ  - 11/3/3(木) 20:26 -

引用なし
パスワード
   よろしくお願いいたします。

たとえば

国    拠点1 拠点2 拠点3・・・拠点30
____________________

日本   aaa  
アメリカ ddd  eee  
中国   ggg  hhh  iii 
:    

というような表形式を


国  拠点
_______

日本 aaa
アメリカ ddd
アメリカ eee
中国   ggg
中国   hhh
中国   iii

というように、国名を、拠点の数分だけ入力し、縦方向に拠点をまとめたい場合はどのような操作になるのか、お伺いできればと思います。

よろしくお願いいたします。

【68423】Re:表をリスト形式に整える
発言  kanabun  - 11/3/4(金) 0:15 -

引用なし
パスワード
   ▼はなかっぱ さん:

>国名を、拠点の数分だけ入力し、縦方向に拠点をまとめたい

配列内で入れ替えてみました

Sub Try1() 'Worksheets(1) に元の表 、Worksheets(2)に結果を出力
  Dim v
  Dim u
  Dim i As Long, j As Long, k As Long
  
  With Worksheets(1).Range("A1").CurrentRegion
    v = Intersect(.Cells, .Offset(1)).Value
  End With
  
  ReDim u(1 To 2, 1 To UBound(v) * UBound(v, 2))
  For i = 1 To UBound(v)
    For j = 2 To UBound(v, 2)
      If IsEmpty(v(i, j)) Then Exit For
      k = k + 1
      u(1, k) = v(i, 1)
      u(2, k) = v(i, j)
    Next
  Next
  Worksheets(2).Range("A1").Resize(k, 2).Value = _
   Application.Transpose(u)
  
End Sub

【68424】Re:表をリスト形式に整える
発言  kanabun  - 11/3/4(金) 0:20 -

引用なし
パスワード
   ↑タイトル行も出力したほうがよかったですね

>  ReDim u(1 To 2, 1 To UBound(v) * UBound(v, 2))
のあとに、
  k = 1: u(1, k) = "国": u(2, k) = "拠点"

としてください。

【68427】Re:表をリスト形式に整える
質問  はなかっぱ  - 11/3/4(金) 20:41 -

引用なし
パスワード
   kanabun 様

このたびはご回答いただき、ありがとうございました!!
さっそく実行してみたところ、
確かに、拠点が縦方向にまとまったのですが、国名が拠点数ぴったりでなく、拠点入力用に用意した項目数(拠点30まで)分入力されてしまいました。

たとえば、日本は拠点1のみ、アメリカは拠点1と2の2つ、中国は拠点1〜3の3つしか入力されていない場合でも

日本 aaa
日本
日本
:(30個分)
アメリカ ddd
アメリカ eee
アメリカ
アメリカ
:(30個分)

という形になってしまっております。

これを拠点数の数分のみにすることはできますでしょうか?

国  拠点
_______

日本 aaa
アメリカ ddd
アメリカ eee
中国   ggg
中国   hhh
中国   iii

という形にしたいと思います。
修正の方法をご教示いただければと思います。

どうぞよろしくお願いいたします。

【68428】Re:表をリスト形式に整える
発言  kanabun  - 11/3/4(金) 21:06 -

引用なし
パスワード
   ▼はなかっぱ さん:

>確かに、拠点が縦方向にまとまったのですが、国名が拠点数ぴったりでなく、拠点入力用に用意した項目数(拠点30まで)分入力されてしまいました。

それは 空白(Empty)に見えるセルでも、スペースがあるからじゃないですか?

以下のように、セルの前後のスペースをとる処理を入れたら
どうなりますか?

Sub Try2()
  Dim v, u
  Dim i As Long, j As Long, k As Long
  
  With Worksheets(1).Range("A1").CurrentRegion
    .Value = Application.Trim(.Cells)
    v = Intersect(.Cells, .Offset(1)).Value
  End With
  
  ReDim u(1 To 2, 1 To UBound(v) * UBound(v, 2))
  k = 1: u(1, k) = "国": u(2, k) = "拠点"
  For i = 1 To UBound(v)
    For j = 2 To UBound(v, 2)
      If IsEmpty(v(i, j)) Then Exit For
      k = k + 1
      u(1, k) = v(i, 1)
      u(2, k) = v(i, j)
    Next
  Next
  With Worksheets(2)
    .Columns("A:B").ClearContents
    .Range("A1").Resize(k, 2).Value = _
     Application.Transpose(u)
  End With
End Sub

【68430】Re:表をリスト形式に整える
お礼  はなかっぱ  - 11/3/4(金) 23:18 -

引用なし
パスワード
   kanabun様

本当にどうもありがとうございました。
確認したら、式で表示してあり、空白に見えるところにも式が入っておりました。
今後は、値として入力される予定で、空白セルは何も入らないことになりますので、kanabunさんのコードで大丈夫だと思います。

ほんと素晴らしいです!
今後ともよろしくお願いいたします。

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