- 締切済み
Excelのデータ表示変更(横:1セル⇒縦:複数セル)
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 こんな風にしたらどうでしょうか? ただし、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 '------------------------------------------
- 134
- ベストアンサー率27% (162/600)
^^;) 説明不足ということはなかったように思います。 1行に展開されたデータを… 6. 形式を選択して貼り付け→値 、 行列を入れ替える とし、OK とする。 7. A列の「001」に相当する値を、必要量コピーする としたつもりです。 データが多いと、煩雑になりやすいので、ほかの方の回答のようなマクロの方が、簡便なのでしょうけどね。
お礼
お返事が遅くなり申し訳ございません。 御回答ありがとうございます! 134様がおっしゃるっとおりデータ量が多めなので マクロにて実施したいと思います。 どうもありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
#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 '--------------------------------------------------------
補足
いろいろと考えていただき ありがとうございます。 関数、マクロと両方試したのですが、 いずれも単一行の場合のみの変換ですよね。 こちらの説明不足で申し訳ないのですが 複数行の対応方法についても教えていただけますと 大変助かります。
- NCU
- ベストアンサー率10% (32/318)
'単一セルを選択して実行 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
補足
ご回答ありがとうございます。 すいません。 こちらの説明不足でした。 以下のように、複数行の場合は無理でしょうか? 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)
こんばんは。 関数でも考えて見ましたが、補助セルを使わないとややこしくなりそうなので、マクロで考えてみました。その文字列の下に展開されます。その文字をアクティブにしてから、実施してみてください。 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
補足
ご回答ありがとうございます。 すいません。 こちらの説明不足でした。 以下のように、複数行の場合は無理でしょうか? 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)
1. B2セルをクリック 2. データ→区切り位置 3. 区切り記号に「カンマ」をチェック 4. ウィザードに従い、最後まで 5. 複数行に、データが分割されるので、分割されたデータをコピー 6. 形式を選択して貼り付け→値 、 行列を入れ替える とし、OK とする。 7. A列の「001」に相当する値を、必要量コピーする という方法が、最も早そうですかね。
補足
ご回答ありがとうございます。 すいません。 こちらの説明不足でした。 以下のように、複数行の場合は無理でしょうか? 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万くらいデータがあります ※マクロは全くわからないので、多少の手作業があっても関数レベルで やれると助かります。(いまから、マクロを勉強してもよいでしょうか??) 良い方法をアドバイスいただければ助かります。
- ベストアンサー
- その他MS Office製品
- メモ帳のデータをエクセルに貼付けしたい。
メモ帳のデータをエクセルに貼付けしたい。 メモ帳に、コンマ区切りで書かれた多数のデータ(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,(写真のように)データ表示させたい
- 締切済み
- Visual Basic
- 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つごとに並べ替えるにはどうすればいいですか教えてください
- ベストアンサー
- Excel(エクセル)
お礼
返事が遅くなり大変申し訳ございませんでした。 どうもありがとうございます! 望んだ結果が返ってまいりました。 この方法にて対応を行いたいと思います。