• 締切済み

Excelのデータ表示変更(横:1セル⇒縦:複数セル)

Excelで同一セル内にに記載してあるデータ(カンマ区切り)を 行を分けて表示したいのですが、簡単な方法はありますか? 例) A列 B列 ---- -------- 001 T1,T2,T3 を A列 B列 ---- -------- 001 T1 001 T2 001 T3 と変更したいのです。 アドバイスをお願いいたします。

  • kick2
  • お礼率28% (2/7)

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 こんな風にしたらどうでしょうか? ただし、C列, D列を使用して展開して、それを元の列に戻して上書きしています。 上書きモードを避けたいのでしたら、  Const MYOPTION As Boolean = False   にすると、C列、D列に展開されます。 このような展開方法に問題があれば、全面的に書き換えます。 なお、Version は、XL2000 ~ 2003 で稼動します。 '------------------------------------------ Sub TestSplit()  Dim myRng As Range  Dim buf As String  Dim myAry As Variant  Dim i As Long, j As Long  Dim strFirst As String  '上書きモード False =OFF, True = ON  Const MYOPTION As Boolean = True    If Selection.Count = 1 Then   Set myRng = ActiveCell.CurrentRegion  Else   Exit Sub  End If    With myRng   If WorksheetFunction.CountA(.Cells) < 2 Then    MsgBox "分割するセルを選択をしてください。", vbInformation    Exit Sub   End If   If .Columns.Count <> 2 Then    MsgBox "データは2列でないと、現在のマクロでは出来ません。", vbInformation    Exit Sub   End If   If InStr(.Cells(1, 2).Value, ",") = 0 Then    MsgBox "カンマ付きデータではありません。", vbInformation    Exit Sub   End If  End With  i = 0 '行の初期設定  Application.ScreenUpdating = False  For Each c In myRng.Columns(2).Cells   myAry = Split(c.Value, ",")   c.Offset(i, 1).Resize(UBound(myAry) + 1).NumberFormatLocal = "000"   c.Offset(i, 1).Resize(UBound(myAry) + 1).Value = c.Offset(, -1).Value   For j = 0 To UBound(myAry)    c.Offset(j + i, 2) = Trim(myAry(j))   Next j   i = i + UBound(myAry)  Next c  If MYOPTION Then    With myRng.CurrentRegion.Offset(, 2).Resize(, 2)     .Copy myRng.Cells(1, 1)     .Clear    End With  End If  Application.ScreenUpdating = True  Set myRng = Nothing End Sub '------------------------------------------

kick2
質問者

お礼

返事が遅くなり大変申し訳ございませんでした。 どうもありがとうございます! 望んだ結果が返ってまいりました。 この方法にて対応を行いたいと思います。

  • 134
  • ベストアンサー率27% (162/600)
回答No.5

^^;) 説明不足ということはなかったように思います。 1行に展開されたデータを… 6. 形式を選択して貼り付け→値 、 行列を入れ替える とし、OK とする。 7. A列の「001」に相当する値を、必要量コピーする としたつもりです。 データが多いと、煩雑になりやすいので、ほかの方の回答のようなマクロの方が、簡便なのでしょうけどね。

kick2
質問者

お礼

お返事が遅くなり申し訳ございません。 御回答ありがとうございます! 134様がおっしゃるっとおりデータ量が多めなので マクロにて実施したいと思います。 どうもありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#2です。 >同一セル内にに記載してある と書いてありましたので、質問の読み違えました。 セルが分かれているので、関数の処理も考えました。 A1   B1 001   T1,T2,T3 A2: =IF(B2<>"",$A$1,"") B2: =MID($B$1,1,FIND(",",B1)-1) B3: 一応のエラー処理は施してあります。 フィルダウン・コピー =IF(ISERROR(FIND("^",SUBSTITUTE($B$1,",","^",ROW(A1)))),"",IF(ISERROR(FIND("^",SUBSTITUTE($B$1,",","^",ROW(A2)))),RIGHT($B$1,LEN($B$1)-FIND("^",SUBSTITUTE($B$1,",","^",ROW(A1)))),MID($B$1,FIND("^",SUBSTITUTE($B$1,",","^",ROW(A1)))+1,FIND("^",SUBSTITUTE($B$1,",","^",ROW(A2)))-FIND("^",SUBSTITUTE($B$1,",","^",ROW(A1)))-1))) となります。 なお、マクロの修正をしておきます。 一応、どこのモジュール(クラスModule以外)に貼り付けても可能なはずです。 '-------------------------------------------------------- Sub TestSplitR()  Dim myRng As Range  Dim buf As String  Dim myAry As Variant  Dim strFirst As String  If Selection.Count > 0 Then   Set myRng = Selection.Cells(1, 1)  End If    With myRng   If .Value = "" Or InStr(.Offset(, 1).Value, ",") = 0 Then    MsgBox "横に2列並んでいるセルを選択をしてください。", vbInformation    Exit Sub   End If   myAry = Split(.Offset(, 1).Value, ",")      Application.ScreenUpdating = False   .Offset(1).Resize(UBound(myAry) + 1).NumberFormatLocal = "000"   .Offset(1).Resize(UBound(myAry) + 1).Value = .Value   For i = 0 To UBound(myAry)    .Cells(i + 2, 2) = Trim(myAry(i))   Next i   Application.ScreenUpdating = True  End With  Set myRng = Nothing End Sub '--------------------------------------------------------

kick2
質問者

補足

いろいろと考えていただき ありがとうございます。 関数、マクロと両方試したのですが、 いずれも単一行の場合のみの変換ですよね。 こちらの説明不足で申し訳ないのですが 複数行の対応方法についても教えていただけますと 大変助かります。

  • NCU
  • ベストアンサー率10% (32/318)
回答No.3

'単一セルを選択して実行 Sub カンマ区切りの文字列を縦に展開()   Dim myStr As String, myArr As Variant   With Selection     If .Count > 1 Then Exit Sub     myStr = .Text     If myStr = "" Then Exit Sub     myArr = Split(Replace(myStr, ", ", ","), ",")     .Resize(UBound(myArr) + 1).Value = WorksheetFunction.Transpose(myArr)   End With End Sub

kick2
質問者

補足

ご回答ありがとうございます。 すいません。 こちらの説明不足でした。 以下のように、複数行の場合は無理でしょうか? A B --- ------ 001 T1,T2,T3 002 T4,T5,T6 ↓ A B --- ------ 001 T1 001 T2 001 T3 002 T4 002 T5 002 T6

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 関数でも考えて見ましたが、補助セルを使わないとややこしくなりそうなので、マクロで考えてみました。その文字列の下に展開されます。その文字をアクティブにしてから、実施してみてください。 Sub TestSplit()  Dim buf As String  Dim myAry As Variant  Dim strFirst As String  With ActiveCell  If .Value = "" Or InStr(.Value, " ") = 0 Then Exit Sub  strFirst = Mid(.Value, 1, InStr(.Value, " ") - 1)  buf = Mid(.Value, InStr(.Value, " ") + 1)  myAry = Split(buf, ",")    Application.ScreenUpdating = False  For i = 0 To UBound(myAry)   .Cells(i + 2, 1).NumberFormatLocal = "000"   .Cells(i + 2, 1).Value = strFirst   .Cells(i + 2, 2) = Trim(myAry(i))  Next i  Application.ScreenUpdating = True  End With End Sub

kick2
質問者

補足

ご回答ありがとうございます。 すいません。 こちらの説明不足でした。 以下のように、複数行の場合は無理でしょうか? A B --- ------ 001 T1,T2,T3 002 T4,T5,T6 ↓ A B --- ------ 001 T1 001 T2 001 T3 002 T4 002 T5 002 T6

  • 134
  • ベストアンサー率27% (162/600)
回答No.1

1. B2セルをクリック 2. データ→区切り位置 3. 区切り記号に「カンマ」をチェック 4. ウィザードに従い、最後まで 5. 複数行に、データが分割されるので、分割されたデータをコピー 6. 形式を選択して貼り付け→値 、 行列を入れ替える とし、OK とする。 7. A列の「001」に相当する値を、必要量コピーする  という方法が、最も早そうですかね。

kick2
質問者

補足

ご回答ありがとうございます。 すいません。 こちらの説明不足でした。 以下のように、複数行の場合は無理でしょうか? A B --- ------ 001 T1,T2,T3 002 T4,T5,T6 ↓ A B --- ------ 001 T1 001 T2 001 T3 002 T4 002 T5 002 T6

関連するQ&A

  • エクセルフィルタ機能1セルにカンマ区切り複数データ

    エクセルで複数のデータがカンマ区切りで1つのセルに入っている場合のフィルタ方法について教えてください。 例えば    A     B 1 名前    動物 2 たろう    いぬ,ねこ 3 はな     ぞう 4 あき     ぞう,いぬ B列からオートフィルター機能のように'いぬ'を選択していぬを抽出し2と4の行を表示させるにはどうしたらよいでしょうか。エクセル初心者です。どなたか設定方法を教えていただけますでしょうか。

  • CSVデータをエクセルのセルに入れたい・・・

    よろしくお願いします。 CSVデータを当方ではエクセルで開いてます。 カンマ区切りごとのデータがエクセルのセルに1つずつ入力されてるので 不用データを行や列ごと削除できるので便利に使っていました。 が、他のPCでデータを同じように加工しようとしたところ、最初のセルに全て連続して入っているという状態で、上記のような作業が出来ませんでした。 5台のPCともXPでエクセル2003です。 テキスト形式・タブ区切り・カンマ区切りなどなど専門的なことが良く判っていないため、説明もうまくできませんが、PCの設定なのか?セルに1つづつ分ける方法があるのか?何でわたしのだけ? ?? 引継ぎが出来ず困っておりますのでどなたかお願いします。教えてください!!

  • エクセルで数字のみのデータが違う内容で表示される

    エクセルで数字のみのデータが違う内容で表示される システムから自動で吐き出されたCSVファイルがあります。 カンマ区切りです。 このファイルをクリックします。エクセルが立ちあがり、内容が見れます。 A列からG列まであります。 A列は日付で例  2010/9/16 B列は時刻で例  18:01:10 C,D,E,列は全て数字のみで例  C列12345  D列55555  E列333 F列は数字と英数字で例  F列A1C でこのとうり画面表示されます。 G列ですが、数字+英字と数字のみのデータが混在です。 例えば ABC123456789 これは画面表示でもセルを選択してセル参照の枠内にも ABC123456789 と表示されています。 ではここに数字のみのデータで例えば 90983031000080だと 画面には9.083E+13と表示されます。 セル参照の枠内には 90983031000080となっています。 C,D,E列も数字のみなのにこのように相違表示しません。 これを画面表示で 90983031000080と表示させる方法は どうすればいいでしょうか? なおこのファイルは毎夜夜間バッチでデーター自動追加で 例えば昨日までは100行有り、 今日見ると100行目の次の101行目から新しいデータが 追加され150行まで増えています。 加算量はその日のデータ量なので毎日違います。 明日は151行目から120行が271行に増加という感じです。 でこのCSVファイルをいつ開いても印刷しても上記G列は 上記のように表示をさせたいです。 よろしくお願いします。

  • excelで、1つのセルに入っている複数の数字を合計するには?

    Excel(2002以降)で、たとえば  セルA1に 33,2,55,764  セルA2に 654,654,8,165,46 のように、カンマ区切りで数字が入っていて、 その数字の合計をB列に表示させるということは可能でしょうか? 試算用にB列・C列などを使い、結果をD列、などという方法でも大丈夫ですが、数字がいくつに分けられるかはわからない(極端な話100個や200個の可能性もある)ので、その分のセルを確保するのは無理です。 数字はいくつ入っているかはセルごとに違い、何も入っていない場合や1つしかない場合もあります。 カンマを+に置換して計算させるような関数があればできそうだと思ったのですが、ヘルプでは探しだせませんでした。 なにかいい方法があればお願いします。

  • エクセル教えてください 重複データの削除方法

    エクセルは良く使っていますが、レベルは初級の上です。 同一セル内に複数の重複データが入っていますが、重複しないものを抽出し 新しいセルに入れたいと思っています。 重複データの区切りは、セミコロン";" パイプ区切り"|",空白、改行が混在しています。 重複しないものを、新しいセルに入れたいのですが、どのようにしたら良いでしょうか? 新しいセルでのデータ区切りは、コンマ(又はパイプ区切り)にしたいと思っています。   例で説明します。 A列(番号) B列(元のデータ)             C列(重複を除いたデータ)  1      タイ ベトナム 中国|タイ|タイ         タイ,ベトナム,中国    2      インド ベトナム|インド タイ |インド 中国  インド,ベトナム,タイ,中国 ※B列のデータを重複を除いて、C列に入れたいと思っています ※2行のデータを例にしましたが、実際には2万くらいデータがあります ※マクロは全くわからないので、多少の手作業があっても関数レベルで やれると助かります。(いまから、マクロを勉強してもよいでしょうか??) 良い方法をアドバイスいただければ助かります。

  • メモ帳のデータをエクセルに貼付けしたい。

    メモ帳のデータをエクセルに貼付けしたい。 メモ帳に、コンマ区切りで書かれた多数のデータ(1行に文字列が10~100個)が、複数行あります。 これを、エクセルの各セルに、位置的に同じ位置に貼り付ける方法を教えてほしい。 しろうとですのでわかりやすくお願いします。 

  • 横のデータを縦のデータにしたい

    sheet1, A列(A4にはタイトル)に種類、B列(B4にはタイトル)に名前、E3:AI3に日付、E4:AI4に曜日、E5:AI5 , E9:AI9・・・・4行置きに数値データがあり、A,B列、および日付、曜日だけ関数を使い、それぞれこのシートにデータが出るようにしています。E5:AI5 , E9:AI9・・・・4行置きには任意に入れています ※A列、B列も4行置きに、データ内容が変わります、A列はA5からデータ、B列はB5からデータで、A5:A8には同一の種類、B5:B8には同一の名前が入っています、表の大きさはA4:AI5000あります、よろしくおねがいします sheet2,(写真のように)データ表示させたい

  • Excelの関数「セルに含まれるある文字をカウントしたい」

    例えばカンマ区切りのデータを、 エクセルで最初に区切ることをせずに開いたとします。 そのとき、A列にだけデータがはいってきますが、 そのA列を参照して「カンマの数」を数えることはできるでしょうか。   A列の値       数式の結果 a,b,c,,,,g  =   6 となるイメージです。 関数でなくても、なにかいい方法がありましたら アドバイスいただければと思います。 よろしくお願いします。

  • エクセルマクロで指定したセルの値を表示変更し転記

    エクセルマクロで指定したセルの値を表示変更して指定したセルに転記したい セルA列に書式が標準で 20101117と入っています。 これをB列にセルの値も表示も共に11/27としたいです。 (セルの値は2010/11/17でセルの表示は11/27ではまずいです。) A列にデーターがあるまで繰り返したいです。 行数は作業毎で常に違います。 以下の記述では出来ませんでした。 よろしくお願いします。 Sub 日付() 行 = 2 Do If Cells(行, 1).Value = "" Then Exit Do Cells(行, 2).Value = Mid(行, 1,5,2) &"/"& RIGHT(行, 1,2) 行 = 行 + 1 Loop End Sub

  • Excelのセルの並べ替え方

    Excelでデータが A B C←セルの行 ------- 1|1 2|2 3|3 4|4 5|5 6|6 7|7 8|8 9|9 ↑セルの列 と並んでいるときに A B C ------- 1|1 2 3 2|4 5 6 3|7 8 9 と3つごとに並べ替えるにはどうすればいいですか教えてください

専門家に質問してみよう