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

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

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

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

Q&A

解決済

2回答

1561閲覧

【Excel】一行を複数の行に分ける

lotadcate

総合スコア24

VBA

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

0グッド

0クリップ

投稿2022/09/06 02:26

編集2022/09/06 07:33

前提

Excelファイルと思って見てください

フラグ固有値場所
True0.763src/main/java/util/aaa.java;
True0.835src/main/java/aaa.java;src/main/java/bbb.java;
False0.249src/main/java/components/ccc.java;
True0.562src/main/java/org/x.java;src/main/java/org/y.java;src/main/java/org/z.java;

上記のExcelファイルを
以下のようにしたい

フラグ固有値場所
True0.763src/main/java/util/aaa.java;
True0.835src/main/java/aaa.java;
True0.835src/main/java/bbb.java;
False0.249src/main/java/components/ccc.java;
True0.562src/main/java/org/x.java;
True0.562src/main/java/org/y.java;
True0.562src/main/java/org/z.java;

なお、場所はすべて .java;で区切られているものとする

問題点

手作業で行をコピーして場所を書き換えようとしていたが、時間がかかりすぎる

実現したいこと

  • 場所ごとに複数行に分ける
  • 場所以外のセルは元々の行のセルをコピーする

敬具

ご指導ご鞭撻のほどよろしくお願いいたします。

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

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

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

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

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

Matsumon0104

2022/09/06 02:38

問題点が記載されておりません。 問題点の追記とともに、現状のソースを記載いただきますと、回答が得られやすいかと思います。
sazi

2022/09/06 02:51

現状はどのように行おうとしていますか? VBAで行うんですよね?
lotadcate

2022/09/06 03:17

> Matsumon0104さん ご意見ありがとうございます。問題点を追記いたします。ソースは上記のようなexcelファイルのみで実際には100行ほどあります。 > saziさん ご意見ありがとうございます。現状は「前提」のところに書きましたようなexcelファイルのみが手元にあります。手作業でコピーして行を挿入し場所を書き換えようとしたのですが、100行ほどあるので、どうにか効率よくできないかと質問いたしました。VBAっていうのは存じ上げませんでした。調べてみます。
guest

回答2

0

ベストアンサー

タグにVBAを追加されたので、VBAを使うことも検討されているということですね。
提示のような結果を得るには、やはり、一般機能だけでは難しいですね。
「区切り位置」は分割して横に展開はできますが、縦に展開はできませんので。

一応、サンプルコードを提示しておきます。

vba

1Public Sub Sample() 2 Dim lastRow As Long 3 lastRow = Cells(Rows.Count, 3).End(xlUp).Row 4 Dim i As Long, j As Long, ary As Variant 5 For i = lastRow To 2 Step -1 6 ary = Split(Cells(i, 3).Value, ";") 7 j = UBound(ary) - 1 8 If j > 0 Then 9 Cells(i + 1, 1).Resize(j, 3).Insert 10 Cells(i + 1, 1).Resize(j, 2).Value = Cells(i, 1).Resize(1, 2).Value 11 Cells(i, 3).Resize(j + 1).Value = WorksheetFunction.Transpose(ary) 12 Cells(i, 3).Resize(j + 1).Replace ".java", ".java;", xlPart 13 End If 14 Next 15End Sub

VBAの初学者にはこのコードの意味をすぐに理解するのは難しいと思います。
まずは、VBA入門書を購入するか、VBA入門サイトで基礎から勉強してください。

VBA入門サイトはいろいろありますので、検索して自分がわかりやすそうなもので学習を始めるといいでしょう。
とりあえず、お勧めを一つ紹介しておきます。

Excel VBA入門 | OfficePro

上記の「VBA基礎知識」の単元を参考に、上記のコードを記述して、実行してみてください。
ご希望の結果が一瞬で得られると思います。

あとは、それ以降の単元をじっくりと学習していって、上記のコードが理解できるように頑張ってください。

投稿2022/09/06 12:50

hatena19

総合スコア34362

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

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

lotadcate

2022/09/07 00:05

コメントありがとうございます。おっしゃる通りでexcelの機能だけではできそうになかったのでvbaというのにも挑戦しようと思います。紹介してくださったリンクを参考に勉強してみようと思います。 提示していただいたコードは、https://kirinote.com/excelvba-multiple_column/ にあるような複数の列を一列にするような処理をされているんですかね。理解していませんがなんとなく似ているのでそのように思いました。 長くなりましたが, 勉強のアドバイスやサンプルコードの提示をしていただきありがとうございます。ベストアンサーとさせていただきます。
guest

0

手作業でコピーして行を挿入し場所を書き換えようとしたのですが、100行ほどあるので、どうにか効率よくできないかと質問いたしました。
VBAっていうのは存じ上げませんでした。

VBAはご存じないという事なので、手作業の効率化として、場所の部分を分割する方法を以下に示します。

①場所の列を選択する
②メニュー ⇒ データ ⇒ 区切り位置 を選択する。
③「区切り位置指定ウイザード」ダイアログが開くので、区切りの指示をする。
※区切り文字の指定で「その他」にチェックし、「;」を入力する

上記で、場所が「;」で分割されます。

投稿2022/09/06 04:16

sazi

総合スコア25430

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

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

lotadcate

2022/09/06 07:40

回答ありがとうございます。 試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問