エクセルにまだまだ不慣れなもので、質問させてください。
下の図《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ランキング
-
【関数】スペースがいくつ入っ...
-
西暦や和暦の表示をyyyymmdd表...
-
【Microsoft Office Excel Comp...
-
Excelはなんで先頭の0を消すん...
-
Excelのセルを飛ばして入力する
-
別シートからの文字を変更
-
エクセルの行の抽出について質...
-
Excelのオートフィル
-
Excel 2019 のピボットテーブル...
-
スプレッドシート クエリ関数 1...
-
excelの不要な行の削除ができな...
-
Excel初心者です。 詳しい方、...
-
【Excel】セル内の時間帯が特定...
-
Excel初心者です。 詳しい方、...
-
EXACT関数とIF関数の組み合わせ...
-
Excelのグラフ軸について
-
スマートな関数を教えて下さい。
-
Excelで全角を半角にしたいので...
-
【マクロ】エクセルにかいてあ...
-
Excel:一部のフォントでセルの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報