![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
エクセルにまだまだ不慣れなもので、質問させてください。
下の図《1》のようなデータが大量にあります。CSV形式に出力したいのですが《2》のように並べ替えなければいけませんよね?(←ここら変の知識も未熟なものですみません。。)
《1》のようなデータを《2》のような並びにする事は可能でしょうか?
ちなみに《1》のようなデータは、一行ずつ空白行をはさみ、下まで何百件も並んでいます。また、1データの行数もランダムです。
何か良い方法がありましたら是非ご教授下さい。よろしくお願い致します。
《1》
A B C D E F
1 ●●
2 ■■
3 ▲▲
4 ◎◎
《2》
A B C D E F
1 ●● ■■ ▲▲ ◎◎
2
3
4
No.6ベストアンサー
- 回答日時:
ちょっとかわった方法ですが…
まずそのファイルを「CSV(カンマ区切り)形式」に保存します。
保存したファイルを正規表現の使えるテキストエディタで開きます。
置換で
「\n\n」→「丸い卵も切りようで四角」
「\n」→「,」
「丸い卵も切りようで四角」→「\n」
その後、テキストエディタを閉じます。
そのファイルをExcelで読み込めば、目指す形式に並び替えられているはずです。
ただし、ExcelでCSVファイルを読み込むときには時間がかかる場合がありますので、あわてずにやってみてください。
No.8
- 回答日時:
こんばんは。
Wendy02です。使わないかもしれませんが、マクロで考えてみました。基本的なエラー処理は含めています。
●●
■■
▲▲
~改行~
○○
□□
△△
以下のようにCSVに出力される
A B C D E F
1 ● ● ■ ■ ▲ ▲
2 ○ ○ □ □ △ △
あくまでも、2列が条件で、変換して256列の単位を越えるものは、出力されません。また、保存される、CSVのファイル名は、元のブックの名称が使用されます。
'なるべく標準モジュールに登録してください。
'----------------------------------------------------------
'Option Explicit
Sub TransposedCSVOut()
'2列-数行をまとめて、横に変換して出力する
Dim tmpSht As Worksheet
Dim AcSht As Worksheet
Dim myRng As Range
Dim myArea As Range
Dim i As Long, j As Integer, k As Integer
Dim Ar As Range, c As Range
Dim SaveName As String
'保存名は、現在のブックの名前を使用します。
'ただし、同名のCSVファイルがある場合は、枝番がつきます。
With ActiveWorkbook
SaveName = Mid$(.Name, 1, InStrRev(.Name, ".") - 1)
End With
Application.ScreenUpdating = False
Set AcSht = ActiveSheet
With AcSht
'2列の設定は、Resize(,2)
Set myRng = .Range("A1", .Range("A65536").End(xlUp)).Resize(, 2)
End With
'定数すべて選択
Set myArea = myRng.SpecialCells(xlCellTypeConstants, 23)
With ActiveWorkbook
Set tmpSht = .Worksheets.Add(After:=.Sheets(.Worksheets.Count))
End With
i = 1
'注意:空白行のない場合は、途中で中断されます。
For Each Ar In myArea.Areas
With Ar
'行が、128行以上では、縦横変換で256列には収まらない
If Ar.Rows.Count > 128 Then
If MsgBox("変換時に256列越えていますので、排出されません。" & vbCrLf & _
"OK =スキップして継続, Cancel = 中止", vbInformation + vbOKCancel + vbDefaultButton2) = vbCancel Then
Application.DisplayAlerts = False
tmpSht.Delete
SaveName = ""
Application.DisplayAlerts = True
GoTo Quit
End If
Else
If WorksheetFunction.CountA(.Cells) > 0 Then
For Each c In Ar.Cells
k = k + 1
c.Copy tmpSht.Cells(i, k)
Next c
i = i + 1
End If
End If
End With
k = 0
Next Ar
Application.CutCopyMode = False
If i < 2 Then
Application.DisplayAlerts = False
tmpSht.Delete
SaveName = ""
Application.DisplayAlerts = True
GoTo Quit
End If
tmpSht.Move
'枝番付け
Do While Dir(SaveName & ".csv") <> ""
If InStrRev(SaveName, "_") > 0 Then
SaveName = Mid$(SaveName, 1, InStrRev(SaveName, "_") - 1)
End If
j = j + 1
SaveName = SaveName & "_" & CStr(j)
Loop
'CSV 保存
ActiveWorkbook.SaveAs SaveName, FileFormat:=xlCSV
ActiveWorkbook.Close False
Quit:
AcSht.Select
Application.ScreenUpdating = True
If SaveName <> "" Then
MsgBox "このブックと同じフォルダに " & SaveName & ".csv で、保存されました。", vbInformation
Else
MsgBox "出力に失敗しました。", vbCritical
End If
Set Ar = Nothing
Set tmpSht = Nothing
Set myArea = Nothing
Set myRng = Nothing
Set AcSht = Nothing
End Sub
'----------------------------------------------------------
No.7
- 回答日時:
OFFSET関数をつかってみてはいかがでしょうか?
A B C D E F G H
1 ●● 1 1 (1) (2) (3) (4)
2 ■■ 2 (5) ・ ・ ・ ・
3 ▲▲ 3 ・ ・ ・ ・ ・
4 ◆◆
5
6 ○○
7 □□
8 △△
9 ◇◇
10
(1)=OFFSET($A$1,D1-1,0,1,1)
(2)=OFFSET($A$1,D1,0,1,1)
(3)=OFFSET($A$1,D1+1,0,1,1)
(4)=OFFSET($A$1,D1+2,0,1,1)
(5)=D1+5
※全角数値が行番号、半角数字が実数値、カッコ数字が関数です。
C列はただの通し番号です。
D列は開始行番号です。今回は5行(データ4行+改行)1セットなので(5)の式で上の行+5を行います。
E~H列で実際に並び替えを行っています。
(1)~(5)の式を入力したら、あとはドラッグでそのまま下にコピーをします。(・の部分)
すべて値に貼り付けなおしてから、データとして必要のないD列(開始行番号)を削除してください。
ご参考になれば幸いです。
No.5
- 回答日時:
1です。
状況がわかりました。
住所録の場合、最初にExcelで作成するときに、並びを工夫しておくと良いですね。
氏名 住所 電話 家族
1 佐藤 東京都 090-- たかし
2 上田 兵庫県 080-- まゆみ
…みたいにしてはどうでしょう。
そうすればCSVで吐き出して、はがきソフトに読み込むのも簡単だと思います。
この回答への補足
申し訳ございません!最初から質問の仕方が悪かったようです。
>>
氏名 住所 電話 家族
1 佐藤 東京都 090-- たかし
2 上田 兵庫県 080-- まゆみ
…みたいにしてはどうでしょう。
そうなんです。実にこのようにしたいという質問だったのです。改行で区切られたデータを一行カンマ区切りにして出力したかったのです。
●●
■■
▲▲
~改行~
○○
□□
△△
のようなテキストを
●●, ■■,▲▲
○○,□□,△△
のような並びにすることは可能ですか?という意味でした。
解り難かったようでごめんなさい!
No.4
- 回答日時:
CSV形式への変換については他の方が回答されているのでさておき
B2
B3
B4
B5
・
・
・
と順に下へ並ぶデーターを
B1・C1・D1・E1…
と横方向へ続くデーターに並べ替えたい場合について回答しますね
まず、先に他の方が述べられているように
Excelでの横方向のデーターの羅列は
比較的件数が少なく設定されています。(AからIVまでの256件)
それに対し縦は65536件データーを置けるようです、
なので、Bのラインから置きだす場合は255件しか置けないので
縦に並んだデーターから255件選んでコピーし
置きたい位置の右端を(この場合だとB1とかB2と加点)選択した後
そこの上で右クリックからプルダウンメニューを出して
「形式を選択して貼り付け」を選び
出てきたメニューから
右下隅の「行列を入れ替える(E)」にチェックを入れて
「OK」ボタンを押すと
縦並びが横並びに変換されて貼り付けられます。
この際にデーターの入っていないCの列のC1に1、
C2に
「=IF(MOD(C1,255)=0,1,C1+1)」
と書いた上
C2をコピーしてC65536までコピ-してみてください
1から255個までデーター個数をカウントしてくれるはずです
お役に立てましたでしょうか?
No.3
- 回答日時:
》 《1》のようなデータを《2》のような並びにする事は可能でしょうか?
可能です。
でも、マクロがお出来になる方ならお茶の子だろうけど、それが出来ない私なら次のようにするかと。面倒なので、もっと簡単でスマートな方法があれば私も知りたいところ。
1.先頭行に1行の空白行を挿入して、データが2行目から始まることにする。
つまり、データはセル A2、A3、A4、… にあり、データの区切りとしての1行の空
白行が所々にある。
2.セル B1 に式 =A2="" を入力して、此れを下方に(列Aの下端のデータと同じ行ま
で)ズズーッと複写
3.セル C2 に式 =IF(A2="","",IF(A1="",A2,C1&","&A2)) を入力して、此れを下方に
(列Aの下端のデータと同じ行まで)ズズーッと複写
4.列B、C全体を選択して、[コピー]→[値の貼り付け]を実行
5.セル B1 のみを選択
6.[データ]→[フィルタ]→[オートフィルタ]を実行
7.セル B1 のオートフィルタ矢印(▼)をクリックして、FALSE を選択
8.セル B2 を選択して、Ctrlキーおよび Shiftキーを抑えたままで、下向き矢印(↓)
キーをチョーン
9.[編集]→[行の削除]を実行して、表示されていたデータを全削除
10.ステップ6に同じ
11.(ステップ1で挿入した)先頭行を削除
12.列A、Bを削除
13.列Aを選択
14.[データ]→[区切り位置]を実行
15.“カンマやタブなどの…”に目玉を入れて[次へ]をクリック
16.“カンマ”にチェック入れ
17.Enterキーを2回叩き付け
以上の件で再質問があれば、ステップ番号および疑問点を示されたい。
No.2
- 回答日時:
こんにちは。
>CSV形式に出力したいのですが《2》のように並べ替えなければいけませんよね?
逆の質問が時々あります。その質問者の方々は、みなさん、CSV形式のファイルだと思っていますが、似ていて違うものです。それは、CSV形式のファイルではありません。データベース・ソフトでないと出来ません。標準では、Excelでは、256列でおしまいになってしまうからです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの並び替えについて 5 2022/07/11 00:49
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
- Excel(エクセル) 【エクセル】並び替えからの並び替え方法 7 2022/07/22 09:46
- その他(プログラミング・Web制作) プログラミング python pandas 固定長データの出力 2 2022/08/16 11:22
- Excel(エクセル) Excelで日付のグラフへの表示 2 2022/04/15 11:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで 自動的に◯や数字を...
-
【マクロ】2回実行したら、エ...
-
エクセルのツールバーから数値...
-
特定の文字列を含む、住所を抽...
-
Excel 2019 [オプション]の[リボンのユ...
-
祝日と土曜、日曜の合計をカウ...
-
EXCELの散布図で日付が1900年に...
-
マイクロソフトのPADを使ってい...
-
絶対参照
-
エクセルでCtrl+Tでテーブルの...
-
【マクロ】名前を保存する際に...
-
エクセルのクイックアクセスツ...
-
【マクロ】VLOOKUPにて参照元に...
-
Excel分数の表示について
-
【EXCEL】画像の黄色部分の抽出...
-
DATE関数で現在の年齢を出した...
-
Excelについて
-
マクロエクセルのブロック解除
-
Excelピボットテーブルの1行目
-
REGEXREPLACE関数について、
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
半角カタカナをヘボン式ローマ...
-
(マクロ)vlookupの元データを同...
-
エクセルで上位バイトのセルと...
-
exselの質問です
-
Excel 大小比較演算子による「...
-
Excel VBについての質問です。
-
エクセルの問題です。絶対値の...
-
非表示列の再表示に失敗
-
職場の人から聞かれており、こ...
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
ユーザー定義関数をアドイン登...
-
【マクロ】for next構文について
-
エクセルの日付を編集する
-
【マクロ】VLOOKUPにて参照元に...
-
exselで最小数で並び替える関数
-
libre 表計算ソフトの計算がう...
-
エクセルで表
-
エクセルの表で1年間の曜日を...
-
西暦和暦
おすすめ情報