No.9ベストアンサー
- 回答日時:
W = Cells(Y, X)
If W = "" Or Len(W) = 0 Then ← セルの値が何かあるかどうか
If J > 0 Then
I = I + 1
Print #1, I & "," & Chr(34) & J & Chr(34) & "," & Z ← CSVファイルへ出力するコマンド、「&」は文字連結 (2)
J = 0
Z = ""
End If
Else
J = J + 1
Z = Z & "," & Chr(34) & W & Chr(34) ← 退避させる処理 (1)
End If
(1)において、
1セル目は:空っぽ””(=Z)とA1セル郵便番号の連結を行いZへ退避
2セル目は:郵便番号(=Z) とA2セル住所 の連結文字列を行いZへ退避
3セル目は:郵便番号 と住所(=Z) とA3セル氏名の連結文字列を行いZへ退避
4セル目は:空白行であるため((2))、Zの内容を出力します。Zはクリアします。
これの繰り返しです。
Iは全体いくつの住所データが存在したかをカウントアップ、しています。(=整合性チェックに使ってください。)
Jは有効な情報をいくつ連結させたかをカウントアップ、しています。
(1)の後に
Print #1, I & "," & Chr(34) & J & Chr(34) & "," & Z
を記載すると全体の動きが把握できるかと思います。
No.8
- 回答日時:
対応例)
必要としている範囲のセルを1つずつ判定し、文字連結します。
必要なときに改行して出力。連結していた文字列はクリアします。
Public Sub AA()
Dim W As String
Dim Z As String
Dim I As Long
Dim J As Long
Dim X As Long
Dim Y As Long
I = 0
J = 0
Z = ""
Sheets(1).Select
Range("A1").Select
Open ThisWorkbook.Path & "\" & "編集結果.CSV" For Output As #1
For X = 1 To 3
For Y = 1 To 200
W = Cells(Y, X)
If W = "" Or Len(W) = 0 Then
If J > 0 Then
I = I + 1
Print #1, I & "," & Chr(34) & J & Chr(34) & "," & Z
J = 0
Z = ""
End If
Else
J = J + 1
Z = Z & "," & Chr(34) & W & Chr(34)
End If
Next Y
If J > 0 Then
I = I + 1
Print #1, I & "," & Chr(34) & J & Chr(34) & "," & Z
End If
Next X
Close #1
MsgBox ("完了")
End
End Sub
-----------------
For X = 1 To 3
For Y = 1 To 200
の「3」はA列(A1に対する1番目)からC列(3番目)を意味します。
「200」は同じ考えで行。
Chr(34)は「”」のことです。
ブックと同じフォルダに"編集結果.CSV"を作ります。
1,"4",,"郵便","住所","住所2","氏名"
2,"3",,"郵便","住所","氏名"
3,"3",,"郵便","住所","氏名"
こんな感じで出来上がります。
順、項目数、その内容。項目数列が4のときは住所が2つとかになる想定です。
見出しはありません。
できるだけ簡単なコマンドを使っています。
処理ロジックは理解していただきたくお願いします。
(体裁は勘弁してください。)
※関数を使うとほとんどが決まった動きしかしないので
パターン変わると使えないこと多いです。
間に空白行2行あっても大丈夫です。
この回答への補足
有難うございます。
動かすと、全体で項目が4つそろっていると上手く縦から横にならびますが、
4項目中3項目、住所が1個だけとかだと、
改行されて出力されてしまいます。
参考にさせて頂き考えてみます。
No.7
- 回答日時:
このズレだと空白から空白が1行分、または郵便番号から郵便番号が1行分という見方になりますので回答例にある3行セットの考え方が使えなくなりそうです。
でもできないこともないです。空白はそのままでよいでしょう。例外はこれくらいでしょうか。少し時間下さい。No.6
- 回答日時:
補足)
>スペースの量が不規則なのでそれを正してから出ないとだめですよね?
これだと不規則なところもなんとかしてね、と解釈されてしまいがち。
本題は縦2列情報を横情報にする事なので、
揃っている前提でその先を教えてほしい、というところが本来の筋ではないでしょうかね?。(=空白行不規則なところを揃えるのは別の質問でもいい話では?)
今回の質問を見ると、
コピーの貼り付けで「行と列を逆にして貼り付け」を繰り返せば手作業でたぶんできます。
またその時にコピーの範囲が3行×3列ずつとか一定で決まっていると
範囲セル位置が変わっていくだけなので、マクロ化対応が可能になってきます。
不規則な空白行があるかどうかは重要なポイントなのです。
郵便番号、住所、氏名、かならず3行そろっていること、もそうです。
住所、氏名、だけというパターンがあっては自動化は困難になってきます。
この回答への補足
申し訳ありません。
空白を消してみると、A列とB列が違ってしまうのです。
郵便番号 郵便番号
住所 住所
住所2 氏名
氏名 郵便番号
郵便番号 住所
住所 氏名
氏名
A列B列が同じ行で揃うように自動で揃う処理をしなければならないです。。
今回はむずかしいでしょうか・・・
No.5
- 回答日時:
こんばんは!
一気に!という方法ではないので、参考になるかどうか判りませんが・・・
↓の画像で説明させていただきます。
2段階でまとめるようにしてみました。
まず、A・B列の空白を無視して、D・E列に表示させます。
それをG~I列に表示するようにしてみました。
D1セルに
=IF(COUNTA(A$1:A$1000)<ROW(A1),"",INDEX(A$1:A$1000,SMALL(IF(A$1:A$1000<>"",ROW($A$1:$A$1000)),ROW(A1))))
これは配列数式になってしまいますので、この画面から直接D1セルにコピー&ペーストしただけではエラーになると思います。
D1セルに貼り付け後、F2キーを押す、又はD1セルでダブルクリック、又は数式バー内で一度クリックします。
編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定します。
数式の前後に{ }マークが入り配列数式になります。
このD1セルをとなりのE1セルまでオートフィルでコピーし、そのまま下へオートフィルでコピーします。
そして、G1セルに
=INDEX($D$1:$E$1000,INT(ROW(A2)/2)*3+COLUMN(A1)-3,IF(MOD(ROW(A1),2)=0,2,1))&""
(これは配列数式ではありません)
という数式を入れ、I1セルまでコピーし、そのまま下へコピーすると
画像のような感じになります。
最後にG~I列全てを範囲指定し → コピー → 「形式を選択して貼り付け」 → 好みの位置に貼り付け
他の列を削除して完了です。
尚、数式は元データの1000行目まで対応できるようにしています。
以上、長々と書きましたが
参考になれば幸いです。m(__)m
No.4
- 回答日時:
[回答番号:No.3]への補足、
後で気付いたことですが、空白行数が一定ではないのですね。
それなら、先に空白行だけを一気に削除(これは簡単にできます!)しておくことをお薦めします。
No.3
- 回答日時:
添付図参照
D1: =OFFSET(A$1,(ROW(A1)-1)*2,)
D2: =OFFSET(B$1,(ROW(A1)-1)*2,)
E1: =OFFSET(A$2,(ROW(A1)-1)*2,)
E2: =OFFSET(B$2,(ROW(A1)-1)*2,)
F1: =OFFSET(A$3,(ROW(A1)-1)*2,)
F2: =OFFSET(B$3,(ROW(A1)-1)*2,)
範囲 D1:F2 を下方にズズーッとドラッグ&ペースト
No.2
- 回答日時:
んでは,簡単な数式だけで出来る別の手で。
手順:
A列のデータをDEF列に並べます。
D1に
=IF(ISERROR(E2),NA(),A1)
E1に
=IF(ISERROR(F2),NA(),A1)
F1に
=IF(AND(A1<>"",A2=""),A1,NA())
を記入,D1:F1を選んで下向けにつるつるっとオートフィルドラッグ。
D:F列を列選択
Ctrl+Gを押し
現れたダイアログでセル選択のボタンをクリックして
現れたダイアログで数式のエラー値を選んでOKし
すかさず編集メニューの削除で上に詰めます。
(一番下にゼロが幾つか並んだのは,手で削除してください)
B列についても同様にHIJ列に並べ替えて,あとは合わせてください。
並べ替えたあと全体をコピーし,その場で型式を選んで貼り付けの「値」で貼り付けて結果を値に変えてやれば,コピーも移動も自由です。
#更に別の手
オートフィルタなどを使って空白行を全て除去してデータを上に詰め,先の回答の数式を少し自力で改修していただいても出来ます。
データを一度WORDにコピーして,置換の機能を使って「何個かまとまった改行(空白行)」を「1行の空白行」に置換(実際には段落記号3連続を段落記号2連続に置換,を数回繰り返すなど)して元のご相談に掲示されたスタイルのデータに整備し,それをエクセルに貼り戻して前回の数式そのままを使うといった方法もあります。
どんなやり方でも結果が出れば勝ちですから,色々手を動かしてみてください。
#それで。
>たぶん、下のスペースの量が一定でないからだと思います。
何て言うか,とっても「ひとごと」みたいですね。それでそんな具合に「実はこうなんです,ほんとはこうだったんです」と後出しされたら,出来なくて当たり前ですし回答する側も「またどうせ違うんじゃない?」と,マジメに回答するだけ無駄じゃない?とも思っちゃいますよね。
とは言え,今回のご質問に関して言えば最初の例示もあまりに「簡単に書かれすぎている」ので,どうせ実際は違うんだろうなこのままじゃ出来ないだろうなと,1回無駄にする気持ちでこれで出来たらむしろお互いラッキーと思って回答してましたから特に構いません。少なくとも,ご質問を投げっぱなしでそのままどこかにトンズラされちゃう方では無かった事だけでも,判って良かったです。
この回答への補足
>とっても「ひとごと」みたいですね
申し訳ありません。
先ほどの関数が難しくて、それが動かない理由はスペースが一定じゃないからかなという意味です。
後出しになって申し訳ないのですが、整列などの手動操作なしで、自動で行いたいんです。
スペースの量が不規則なのでそれを正してから出ないとだめですよね?
それをスペース量を自動でパターン化する方法をとったあと、例の数式をつかえばいいのでしょうか?
No.1
- 回答日時:
AB列にその格好でデータがあります。
=INDEX($A:$B,INT((ROW(A1)-1)/2)*4+COLUMN(A1),2-MOD(ROW(A1),2))
と式を入れて,右にあと2つ,そして下にコピーするとできます。
この回答への補足
=INDEX($A:$B,INT((ROW(A1)-1)/2)*4+COLUMN(A1),2-MOD(ROW(A1),2))
むずかしい式ですね。。
最初の2個までは綺麗に揃いましたが、それ以上は上手く揃いません。
たぶん、下のスペースの量が一定でないからだと思います。
郵便番号 郵便番号
住所 住所
氏名 氏名
スペース スペース
郵便番号 郵便番号
住所 住所
氏名 氏名
スペース スペース
スペース スペース
郵便番号 郵便番号
住所 住所
氏名 氏名 とか・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) 【至急・画像あり】建物or住所から電話番号を出す方法を教えてください 3 2023/02/17 11:58
- くじ・懸賞 【応募はがきのかきかたについて】 応募ハガキの書き方で、郵便ハガキの裏に ①郵便番号(自分の ②住所 3 2022/08/28 15:28
- LINE LINE交流を始めるには・・・ 2 2023/04/03 08:23
- Excel(エクセル) エクセルの住所から郵便番号を表示するには 2 2022/09/01 16:18
- 郵便・宅配 専用郵便番号なので住所なしで届くという場合 7 2022/04/14 14:08
- 地図・道路 皇居の住所と郵便番号は何ですか? 宮内庁は千代田1-1、皇居外苑は皇居外苑1-1のようですが、 5 2022/12/22 12:06
- 郵便・宅配 郵便物を送る時、郵便番号と名前はあっていたんですがまったく違う住所で送ってしまいました。 そういう場 7 2023/06/28 14:08
- Excel(エクセル) 【Excel】住所に郵便番号を付記する方法 3 2022/05/07 17:15
- 郵便・宅配 郵送の仕方を教えてください 3 2022/09/26 21:45
- その他(ネットショッピング・通販・ECサイト) 住所 3 2022/12/02 10:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Officeを開くたびの「再起動メ...
-
英数字のみ全角から半角に変換
-
outlookのメールが固まってしま...
-
マイクロソフト 一時使用コード...
-
大学のレポート A4で1枚レポー...
-
会社PCのメールが更新されない
-
teams設定教えて下さい。 ①ビデ...
-
VBAで横データを縦データに変換...
-
PCを買い換えました。 今使って...
-
Microsoft Formsの「個人情報や...
-
エクセルにおいて品名コードを...
-
マクロ自動コピペ 貼り付ける場...
-
エクセルでレーダーチャートの...
-
office365って抵抗感ないですか?
-
エクセルで英文字に入れた下線...
-
WEBの記事を印刷する際にA...
-
vb.net オブジェクト指向につい...
-
Office 2021 Professional Plus...
-
会社のTeamsのことで相談です。...
-
何文字超えたファイルだけを抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
英数字のみ全角から半角に変換
-
「生産性ソフトウェア」とは何...
-
会社PCのメールが更新されない
-
【関数】○年○ヶ月と表示された...
-
WEBの記事を印刷する際にA...
-
エクセルでXLOOKUP関数...
-
Microsoft familyに追加されま...
-
会社のOutlookにてメールを予約...
-
Microsoft Formsの「個人情報や...
-
Microsoft365の一部を解約したい
-
マクロ自動コピペ 貼り付ける場...
-
Outlook で宛先が複数の場合の人数
-
outlookのメールが固まってしま...
-
【Excel VBA】PDFを作成して,...
-
大学のレポート A4で1枚レポー...
-
office365って抵抗感ないですか?
-
Microsoftにofficeアプリについ...
-
Excel テーブル内の空白行の削除
-
マイクロソフト 一時使用コード...
おすすめ情報