1りんご・ばなな・もも
2みかん・さくらんぼ・ぶどう
というのを、
1りんご
1ばなな
1もも
2みかん
2さくらんぼう
2ぶどう
というように変換させる簡単な方法をご存知の方いらっしゃいますか?
ご教授ください。
VBA を使用した例ですがどうでしょうか。
シートタブを右クリックし「コードの表示」を選択し、そこに下記を貼り付けて、
EXCELに戻って、Alt+F8でsepName を選択して実行してください。
元のデータを書き換えてしまいますので、バックアップを取ってからお試しください。
Sub sepName() Dim lastRow As Long, i As Long, j As Long lastRow = Range("A" & Rows.Count).End(xlUp).Row For i = lastRow To 1 Step -1 For j = 6 To 3 Step -1 If Cells(i, j).Value <> "" Then Rows(i).Copy Rows(i + 1).Insert Shift:=xlDown Cells(i + 1, 2).Value = Cells(i, j).Value Cells(i + 1, 3).Resize(1, 10).Value = "" Cells(i, j).Value = "" End If Next Next End Sub
ああ、2度手間だ。
数字は必ず1文字?
文字は必ず3種類?
文字は必ず「・」で区切られている?
数字は、1~3488までです。
文字は人の名前になりますので、無数です。
また、文字は各セルで区切られています。
A1セル 1りんご・ばなな・もも
D1セル =FIND("・",A1)-1
E1セル =FIND("・",A1,D1+2)
F1セル =LEN(A1)
G1セル =LEFT(A1,D1)
H1セル =LEFT(A1,1) & MID(A1,D1+2,E1-D1-2)
I1セル =LEFT(A1,1) & RIGHT(A1,F1-E1)
区切り文字が「・」以外なら、"・"の部分を"/"とか"@"などに変えてください。
また、複数行対応したいときは、それぞれのセルをクリックして、セルの右下の黒い四角の部分をクリックし、下方向にドラックさせてください。
確かに、1りんご1ばなな1ももになりました。
それが、
1りんご
1ばなな
1もも
というな並びを自動的に出来るものを希望していました。惜しいです。
では、もう少し条件を細かく書いてください。
仕様がわからないと、中々ご希望の回答が出来ませんので・・
申し訳ありませんでした。
391 阿部 新井 飯岡 岩崎 重田
392 花田 安田 山下
393 岩本 梅津 久保 小林 服部
(一つ一つはセルに入っています)
というのを、
391阿部
391新井
・
・
・
392花田
というように縦1列に並べたかったのです。
一つ一つはセルに入っています
の意味ですが
A1のセルに391
B1のセルに阿部
C1のセルに新井
・・・・
ということでしょうか?
それとも
A1のセルに 「391 阿部 新井 飯岡 岩崎 重田」
でしょうか?
横に最高何人分名前がありますか?
名前の区切りはスペースだけ?
氏名はくっついている?
「阿部ジョージ」「新井素子」
「阿部 ジョージ」「新井 素子」
>一つ一つはセルに入っていますの意味ですが・・
おっしゃるとおり、A1のセルに391B1のセルに阿部、・・・となります。
あと横にはMax5人ありますが、1~5人でまちまちです。
また、氏名はくっついています。
ツール→マクロ→Visual BASIC editer
挿入→標準モジュール
出てきたウィンドウに以下を貼り付け、F5をおしてください。
(マクロを選択が出てきたらtestというマクロを実行してください
Sub test() Columns("A:A").Select Selection.Insert Shift:=xlToRight x = 3 y = 1 i = 0 y2 = 1 Do While i = 0 If Cells(y, x).Value = "" Then y = y + 1 x = 3 If Cells(y, x).Value = "" Then i = 1 End If Else a = Cells(y, x).Value Cells(y2, 1).Value = Cells(y, 2).Value & a y2 = y2 + 1 x = x + 1 End If Loop End Sub
ありがとうございます!ビンゴです!!
VBA を使用した例ですがどうでしょうか。
シートタブを右クリックし「コードの表示」を選択し、そこに下記を貼り付けて、
EXCELに戻って、Alt+F8でsepName を選択して実行してください。
元のデータを書き換えてしまいますので、バックアップを取ってからお試しください。
Sub sepName() Dim lastRow As Long, i As Long, j As Long lastRow = Range("A" & Rows.Count).End(xlUp).Row For i = lastRow To 1 Step -1 For j = 6 To 3 Step -1 If Cells(i, j).Value <> "" Then Rows(i).Copy Rows(i + 1).Insert Shift:=xlDown Cells(i + 1, 2).Value = Cells(i, j).Value Cells(i + 1, 3).Resize(1, 10).Value = "" Cells(i, j).Value = "" End If Next Next End Sub
すごいぃ!!!こっちの方が更に自分が求めていた形です!
ありがとうございます。
ExcelVBAを使った方法です。
使ったことがなければ以下を参考に。
http://www.officepro.jp/excelvba/ini/index1.html
http://www.officepro.jp/excelvba/ini/index2.html
http://www.officepro.jp/excelvba/ini/index3.html
次のコードを標準モジュールに貼り付けて、データのあるシートを開いた状態で実行してください。
新規シートが追加されて、データを並べ替えて表示します。
ub Macro() Dim ws As Worksheet Dim ns As Worksheet Dim c As Integer Dim r1 As Long Dim r2 As Long Set ws = ActiveSheet Set ns = Worksheets.Add r1 = 1 r2 = 1 While ws.Cells(r2, 1).Value <> "" c = 2 While ws.Cells(r2, c).Value <> "" ns.Cells(r1, 1).Value = ws.Cells(r2, 1).Value ns.Cells(r1, 2).Value = ws.Cells(r2, c).Value r1 = r1 + 1 c = c + 1 Wend r2 = r2 + 1 Wend End Sub
ありがとうございました。
すごいぃ!!!こっちの方が更に自分が求めていた形です!
ありがとうございます。