質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

1697閲覧

縦にならんでいる文字列を表にしたい

hiro1

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2018/05/21 04:15

前提

以下のように縦にA~Eの設定項目と、abc1~の設定値が繰り返し並んでいるとします。
項目の最後にendの文字が必ず入ります。(テキストデータ)

設定項目=設定値

A=abc1
B=def1
C=ghi1
D=jkl1
E=mno1
end

A=abc2
B=def2
C=ghi2
D=jkl2
E=mno2
end

たまに、項目が抜けたりもします。以下の例でいうと項目Dが無いです。
A=abc3
B=def3
C=ghi3
E=mno3
end

-----繰り返し-----

実現したいこと

文字列を以下のように表に当て込みたいです。

A B C D E
abc1 def1 ghi1 jkl1 mno1
abc2 def2 ghi2 jkl2 mno2
abc3 def3 ghi3 空 mno3

試したこと

正規表現で、改行をカンマ、endの文字列の後を改行にして、
単純に横に並べるところまでは出来ましたが、空のセルを挿入する方法がわからないです。

ご教授よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/21 04:25

調べてみたこと、やってみたこと(そのソースコード)を具体的に追記してください。また参考先サイトがあればURLも質問に追記してください。既に見た先が回答についてしまうと無駄なやり取りが発生しますし、もしかしたら参考記事の理解が間違っているために解決に至れていないのかもしれません。https://teratail.com/help/question-tips#questionTips1-2
hiro1

2018/05/21 05:01

Aの項目のみ、ユニーク(主キー)となっています。その他の項目は重複ありです。
m.ts10806

2018/05/21 05:06

では、そのコードをご提示ください。 > やってみたこと(そのソースコード)を具体的に追記してください
hiro1

2018/05/21 05:14

VBAのコーディングの知識は無いです。>試したことにあるとおり、縦の文字列をカンマ区切りにしてエクセルに貼り付けたところまでです。
m.ts10806

2018/05/21 05:17 編集

なるほど。タグに「VBA」「マクロ」があったので「単純に横に並べるところまでは出来ました」の部分は何かしらプログラムを組んだ結果かと思っておりました。失礼しました。VBAで対応したいということではないのですか?
hiro1

2018/05/21 05:19

はい。VBAでも、そのままコピーペーストできるような内容があればと思って、タグを付けました。
ExcelVBAer

2018/05/21 05:28

ここは他人に仕事をさせる場所ではないので。
hiro1

2018/05/21 05:37

わかりました。
guest

回答2

0

ベストアンサー

空のセルを挿入する方法がわからないです

というだけなら正規表現で対応できるのでは?

テキストエディタ(秀丸とか)で一括置換。

パターン (?:A=(.?)\n)?(?:B=(.?)\n)?(?:C=(.?)\n)?(?:D=(.?)\n)?(?:E=(.*?)\n)?end
置換 \1\t\2\t\3\t\4\t\5

これでタブ区切りのデータになるので、Excelを開いて、テキストをそのままcopy&paste。
※カンマ区切り(CSV)は、一度ファイルに落す必要があるのでタブ区切りのほうが便利。

投稿2018/05/22 01:33

h.horikoshi

総合スコア505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro1

2018/05/22 09:44

正規表現でも出来たんですね。素晴らしいです! サクラエディタが最強と思ってましたが、秀丸は複数行検索が出来るんですね。 ↑のVBAも教わった通りにやったらすんなり出来てしまったんですけど、 やはり正規表現1ライナーで出来た方がスマートですね。
guest

0

多くの指摘を受けている通り、ここはプログラムを作ってもらう場所ではありません。
ご自身で記載されたコードがないので具体的なアドバイスは致しかねます。

ですが追記・修正依頼を見る限りVBA初心者さんのようですので、何をどう調べれば実現できそうか、というところまでアドバイスさせていただきます。


まず、今回の目的の動作をシート関数だけで実現するのは難しいと思います。
実現するならVBAを利用することになりそうです。

VBAの基本になりますが、セルからデータを取得したり、セルに値をセットする関数は各所で使う必要がありますので、まずこれを覚えましょう。(Cells関数/Range関数)

処理の流れとしては、
①入力データをループ処理で1つづつ取得します。(ループ処理:For~Next/Do~Loopなど)
②取得した値が"end"なら、出力列を1つ下にずらします。(条件判断文:If~Else~EndIfなど)
③取得した値を「設定項目」と「設定値」に分割します。(文字列の分割:Split関数)
④「設定項目」から出力列を判断します。(条件判断文:If~Else~EndIfなど)
⑤出力列に「設定値」の値を出力します。(Cells関数/Range関数)
⑥①に戻る

といった感じになります。

最終データまでこれを繰り返すことで目的の処理が実現できるのではないかと思います。
まずはVBAのことやこのあたりの関数のことをご自身で調べながらがんばってみてください。

ご自身でコードを書いてみて、そのうえで行き詰ってからの質問であれば、きっと多くの方からアドバイスがもらえると思います。
がんばってください。

投稿2018/05/21 07:25

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro1

2018/05/21 08:08

ご親切にありがとうございます。 全部答えまで書いて頂いて、ありがたいです。 頑張ってみます。
jawa

2018/05/22 04:20 編集

私から提供したのはおおまかな処理の流れと、各所で使いそうな関数の候補だけです。 その関数をどう使い、組み合わせて、また結果を利用して、最終的に目的の動作となるように組み立てるのがプログラミングの本題です。 壁にぶちあたったらまたご質問ください。 できる範囲でアドバイスさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問