Excel VBA質問箱 IV

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

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


757 / 13645 ツリー ←次へ | 前へ→

【78507】「・」か改行などで区切られたセルを縦の行に分けたい yk 16/10/24(月) 0:30 質問[未読]
【78508】Re:「・」か改行などで区切られたセルを縦... β 16/10/24(月) 9:18 発言[未読]
【78509】Re:「・」か改行などで区切られたセルを縦... yk 16/10/24(月) 10:32 発言[未読]
【78510】Re:「・」か改行などで区切られたセルを縦... β 16/10/24(月) 13:03 発言[未読]
【78511】Re:「・」か改行などで区切られたセルを縦... yk 16/10/24(月) 16:02 発言[未読]
【78512】Re:「・」か改行などで区切られたセルを縦... β 16/10/24(月) 16:58 発言[未読]
【78513】Re:「・」か改行などで区切られたセルを縦... yk 16/10/24(月) 18:23 お礼[未読]

【78507】「・」か改行などで区切られたセルを縦の...
質問  yk  - 16/10/24(月) 0:30 -

引用なし
パスワード
   お世話になります。
「・」や改行で区切られた2項目のデータを、縦の行ごとに区切ったEXCELにしたいのですが、

【入力例A】

| A    | B        | C    |
-----------------------------------------------------
1|品番   | カラー     | サイズ
-----------------------------------------------------
2|XYZ-001  | ブラウン・グレー| 
-----------------------------------------------------
3|XYS-002  | カーキ・白・黒 |S・M・L
-----------------------------------------------------
4|XYZ-123  |          |S・M・L
-----------------------------------------------------
5|XYZ-999  |         |
-----------------------------------------------------
6|XYZ-456  | ピンク・グリーン|
-----------------------------------------------------
※別の列に下図「入力例B」のように項目名1・項目名2の列もあり。


または
【入力例B】(セル内改行)※Aのデータをもとに、数式を使い試行錯誤途中のセルの状態。

| A    | B        | C    | D
-----------------------------------------------------
1| 項目名1| 値1      | 項目名2| 値2
-----------------------------------------------------
2| カラー | XYZ-001 ブラウン|     |
|     | XYZ-001 グレー |     |
-----------------------------------------------------        
3| カラー | XYZ-002 カーキ | サイズ | S
|     | XYZ-002 白   |     | M
|     | XYZ-002 黒   |     | L
-----------------------------------------------------
4| サイズ | XYZ-123 S   |      |
|     | XYZ-123 M   |      |
|     | XYZ-123 L   |      |
-----------------------------------------------------
※カラーがなくサイズがあるものは、値1に詰める。

↑のようなエクセルの入力状態を下図のようにしたいのですが、

【完成図例】
※全てを「行」に分けて、値2があれば品番と値1をコピーして行が増える
| A    | B    | C    | 
-----------------------------------------------------
1| 品番  | 値1  |  値2
-----------------------------------------------------
2| XYZ-001 | ブラウン |     |
-----------------------------------------------------
3| XYZ-001 | グレー |     |
-----------------------------------------------------
4| XYZ-002 | カーキ |  S
-----------------------------------------------------
5| XYZ-002 | カーキ |  M
-----------------------------------------------------
6| XYZ-002 | カーキ |  L
-----------------------------------------------------
7| XYZ-002 | 白   |  S
-----------------------------------------------------
8| XYZ-002 | 白   |  M
-----------------------------------------------------
9| XYZ-002 | 白   |  L
-----------------------------------------------------
10| XYZ-002 | 黒   |  S
-----------------------------------------------------
11| XYZ-002 | 黒   |  M
-----------------------------------------------------
12| XYZ-002 | 黒   |  L
-----------------------------------------------------
13| XYZ-123 |  S   |      |
-----------------------------------------------------
14| XYZ-123 |  M   |      |
-----------------------------------------------------
15| XYZ-123 |  L   |      |
-----------------------------------------------------
16 XYZ-456〜

【入力例B】の状態から、B列のみだったら、列選択で別のシートに貼り付けて
テキスト形式で保存してエクセルで開くと、元のセル内改行が行ごとに改行された状態(B列部分のみ)ができたのですが、
値2も「完成図例」に入れられず行き詰まりました。

※例は全てA列からアルファベット順に書いていますが実際のファイルは余計な列も含まれています。


このような変更をしたい場合に、何か良いアイデアがございましたら教えてください。
宜しくお願いします。

【78508】Re:「・」か改行などで区切られたセルを...
発言  β  - 16/10/24(月) 9:18 -

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

1つのシートが行によって、A形式だったりB形式だったりするということではなく
A形式のものをを完成形の形に、B形式のものを完成形の形にと
ようは2つのコードを要望しておられるのですね?

【78509】Re:「・」か改行などで区切られたセルを...
発言  yk  - 16/10/24(月) 10:32 -

引用なし
パスワード
   分かりづらくてすみません。
現在は、元の入力形式Aは列アルファベット前半に直接情報入力、
B形式は列アルファベット後半にA形式を数式で表示変更したもので
1つのシートに両方入って試行錯誤中です。

どちらかの形式、または他の形式に変えても、「1品番1行」に入れた入力情報から、
別のシートに1品番複数行の「完成形」を作れたらと思っています。

何かアイデアございましたら宜しくお願いします。

【78510】Re:「・」か改行などで区切られたセルを...
発言  β  - 16/10/24(月) 13:03 -

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

A形式であれB形式であれ、最終形に変換するのはいかようにもできます。
ただし、1つのシートに、行ごとにA形式だ、B形式だと混在しているとすれば
その行が、どちらの形式なのかを判定しなければいけませんよね。

その判定基準は?
どこの列のどんな状態を見て、それがこうだったらA形式、それがこうだったらB形式だというルールを
言葉で提示いただけますか?

【78511】Re:「・」か改行などで区切られたセルを...
発言  yk  - 16/10/24(月) 16:02 -

引用なし
パスワード
   ありがとうございます。

行ごと(1品番ごと)に入力例AだったりBだったりの混在ではなく、
全て入力例Aで入力しています。

入力例Aが、セルA列〜C列を使っているとしたら、入力例Bは同じシートの同じ行でセルE列以降に数式を使ってセル内改行のBの状態にして列のテキスト保存などを試した入力例でしたが、
ややこしいので入力例Bはないものとして無視して構いません。

入力例Aの1品番で1行の状態から、1品番が複数行になる完成例にする方法がございましたらお願いします。


【入力】   色      サイズ(入力シート)
XXX-001  | 黒・白・茶| S・M・L
XXX-002  |      | M・L
XXX-003  |      | 
XXX-004  | 赤・緑  |



【完成】 選択1 選択2 (別のシート)
XXX-001 |黒| S
XXX-001 |黒| M
XXX-001 |黒| L
XXX-001 |白| S
XXX-001 |白| M
XXX-001 |白| L
XXX-001 |茶| S
XXX-001 |茶| M
XXX-001 |茶| L
XXX-002 |M |
XXX-002 |L |
XXX-004 |赤|
XXX-004 |緑|

※色がなくサイズだけのXXX-002は選択1の列にサイズ内容が入る
※色もサイズもないXXX-003は載らない


このような説明で分かりますでしょうか?
説明が下手ですみません。

入力の仕方が悪く完成形にするのが難しい場合は、1商品1行でしたらある程度変更も可能です。
(カラー列・サイズ列にすると空欄が出る商品もあるので、それが支障になる場合は、元からカラーの列にサイズ内容を入れる、など)


宜しくお願いします。

【78512】Re:「・」か改行などで区切られたセルを...
発言  β  - 16/10/24(月) 16:58 -

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

★印、実際のシート名に変更願います。

Sub Sample()
  Dim dic As Object
  Dim c As Range
  Dim w1 As Variant
  Dim w2 As Variant
  Dim d1 As Variant
  Dim d2 As Variant
  
  Set dic = CreateObject("Scripting.Dictionary")
  
  With Sheets("Sheet1")  '★入力シート
    For Each c In .Range("A2", .Range("A" & Rows.Count).End(xlUp))
      w1 = Split(c.Offset(, 1).Value, "・")
      w2 = Split(c.Offset(, 2).Value, "・")
      If UBound(w1) >= 0 Or UBound(w2) >= 0 Then 'どちらかあれば
        If UBound(w1) < 0 Then w1 = Array(Empty)
        If UBound(w2) < 0 Then w2 = Array(Empty)
        For Each d1 In w1
          For Each d2 In w2
            dic(dic.Count) = Array(c.Value, d1, d2)
          Next
        Next
      End If
    Next
  End With
  
  With Sheets("Sheet2")  '★別シート
    .UsedRange.Offset(1).ClearContents 'タイトル行以外クリア
    .Range("A2").Resize(dic.Count, 3).Value = WorksheetFunction.Transpose(WorksheetFunction.Transpose(dic.items))
    On Error Resume Next
    .Range("A2", .Range("A" & Rows.Count).End(xlUp)).Offset(, 1).SpecialCells(xlCellTypeBlanks).Delete xlToLeft
    On Error GoTo 0
    .Select
  End With
  
End Sub

【78513】Re:「・」か改行などで区切られたセルを...
お礼  yk  - 16/10/24(月) 18:23 -

引用なし
パスワード
   β様、ありがとうございます!
書いていただいたコードで、まさにやりたかったことが完璧に再現できました!

今まで手作業で時間がかかり、VBAはまだ一部だけ調べて使ってみたりマクロの記録から少し変えたり程度しか分からなかったので、完璧に書いていただけて本当に助かりました。
感謝いたします。ありがとうございました。

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