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

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

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

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

マクロ

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

Q&A

解決済

3回答

707閲覧

VBA データ取得について

Dai5

総合スコア13

VBA

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

マクロ

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

0グッド

0クリップ

投稿2020/03/04 13:43

編集2020/03/04 14:29

前提・実現したいこと

ExcelのVBAでシート1の縦に並んだデータをコピーペーストしてシート2に横に並べていくプログラムを作りたいです。1つのセルに1つの値が入っています。

例)シート1 → シート2
1 1 あ 3 4 JPN〇〇〇
あ 4 6 いいい JPN〇〇〇
3 …

JPN○○○

6
いいい
JPN〇〇〇

上記のようなシート1の値を1行ずつ取得し、シート2に横に並べ、特定のアルファベットJPNがきたら改行しまた処理をする繰り返し処理のプログラム作成を考えています。

試したこと

xlDownで縦のデータを全てコピーしてPasteSpecial Transpose:=Trueで横にデータをペーストすることはできたのですが、アルファベットがきたら改行し、処理を繰り返したり、1行ずつコピーペーストするプログラムの書き方が分かりません・・・。
if文などでlike*"A"*のような文を応用すればできそうな気がしているのですが、理解力が足りず詰まってしまっています・・・。
似たようなプログラムを組んだことのある方がいればアドバイスを頂きたいです。

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

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

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

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

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

tatsu99

2020/03/04 14:06

1.1つのセルに1文字ではなく、AAAのように3文字の場合もあるのですか。 2.その場合、「3A5」のような文字があったときも、改行するのですか。 3.アルファベットは、大文字と小文字の両方が対象ですか。 4.特殊文字(#、&、%等)が入ることはないのですか。もし、あるなら、その場合は改行しなくでよいのですか。
Dai5

2020/03/04 14:26 編集

ご指摘ありがとうございます。 1.1つのセルには複数の文字が入っています。漢字やひらがな、カタカナ、アルファベット、数字などが使われています。 2.説明不足ですみません。 3A5の場合は改行はしません。 先頭に特定のアルファベットがついてい る時に改行したいです。ここではAとしてしまっているのでややこしいですが、実際にはJPN○○○のような商品番号?みたいなデータを扱っているので、この固定されているJPNを検知して改行という形にしたいです。 3.大文字のみです。 4.特殊文字が入ることはなく、もし入っても改行はしません。 よろしくお願いいたします。
guest

回答3

0

ExcelVBA

1Option Explicit 2 3Sub test() 4 Dim rngCopyForm As Range  'コピー元セル範囲 5 Dim rngCopyTo As Range   'コピー先セル範囲(左上) 6 Dim c As Range        'セル範囲の内の各セル 7 Dim ixRow As Long      '行番号 8 Dim ixCol As Long      '列番号 9 Dim v As Variant       'セルの値 10 11 Set rngCopyForm = Worksheets("シート1").Range("A1").CurrentRegion.Cells 12 Set rngCopyTo = Worksheets("シート2").Range("A1").Cells 13 ixRow = 1 14 ixCol = 1 15 16 For Each c In rngCopyForm 17 v = c.Value 18 rngCopyTo(ixRow, ixCol).Value = v 19 If v Like "JPN*" Then 20 ixRow = ixRow + 1 21 ixCol = 1 22 Else 23 ixCol = ixCol + 1 24 End If 25 Next 26End Sub

僕が書いたらこんな感じです。
他の方とほぼほぼ同じですが、違いが重要だと思いますので、
書いてみます。

こうでなければならないというわけではないですが、
後で、自分で読みやすいコードを書けるようになるといいと思います。
(コメントが要るのか要らないのか等々)
参考になれば。。。

投稿2020/03/05 01:46

mattuwan

総合スコア2136

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

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

Dai5

2020/03/08 03:59

mattuwanさん ありがとうございます! 読みやすさも意識してみようと思います。
guest

0

ベストアンサー

こんばんは。こういうのですかね?

VBA

1Sub Tenki() 2'Sheet1のA列にある文字列を上から順に検査して 3'Sheet2へ、A1セルを起点として、順次転記していきます 4'そのとき、"JPN"という文字列がセルに含まれていたら 5'次の行に改行します 6'"JPN"という文字列が発見されないかぎり、Sheet2には右へ転記していきます 7 8Dim r As Range '転記する対象のセル(レンジ)です 9Dim I As Long 'sheet2のI行目に転記します 10Dim J As Long 'Sheet2のJ列目に転記します 11 12I = 1 '何行目かをコントロールします 13J = 1 '何列目かをコントロールします 14 15'元になるSheet1をセレクトしておきます 16Worksheets("sheet1").Select 17 18'Sheet1のA列が空白になるまで繰り返すループです 19For Each r In Worksheets("sheet1").Range("A1", Range("A1").End(xlDown)) 20 'r をSheet2のJ列目に転記します 21 Worksheets("sheet2").Cells(I, J) = r.Value 22 23 'Sheet1のA列のセルに、もし"JPN"という文字列を発見しなかったら 24 If InStr(r.Value, "JPN") = 0 Then 25 '右に一個ズレておきます。下にはズレません。 26 J = J + 1 27 Else 'もし"JPN"という文字列を発見したら 28 '次の行に一個ずらします 29 I = I + 1 30 '次のデータのために1列目にリセットします 31 J = 1 32 End If 33Next r 34End Sub 35

結果はこのようになりますね。

Sheet1です

Sheet2です

投稿2020/03/04 16:10

AkiSaito

総合スコア110

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

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

Dai5

2020/03/08 03:50

AkiSaitoさん ありがとうございます! 実現したかったことができました。
guest

0

こんにちは。
目的がシート1からシート2への条件付きコピーということなら、自分もAkiSaitoさんと似たようなコードを書くと思います。

コピー&ペーストがマストなのでしょうか?

投稿2020/03/04 23:14

DreamTheater

総合スコア1095

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

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

Dai5

2020/03/08 03:53

DreamTheaterさん コメントありがとうございます。 コピー&ペーストがやりたかったので、AkiSaitoさんのを参考にさせて頂きました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問