- ベストアンサー
エクセルVBAで別シートへ情報を加工して移したい
- エクセルVBAを使用してAのシートからBのシートへ、特定の情報を抜き出して一覧表に加工したいです。
- 現在、AのシートからBのシートへの情報の移動はできていますが、加工やクリアの処理について困っています。
- Aシートには届いたメールの本文が入力されるため、その情報をBシートに加工して貼り付けたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ご提示の処理でBシートの1行目を挿入し、 IDや営業形態で1行目と2行目に書き出しという処理を なぜ必要なのか辻褄が合わないように思います。 ので、以下のように解釈しています。 (1)Bシートの1行目を挿入 (2)AシートのA列1行目~○行目(3行固定?)を加工 (3)行列を入替でBシートの1行目のA1、B1、C1セル・・・へ出力 間違っていたら申し訳ありません。 ただし、 エクセル2007では、Bシートの列数の最大が16384列までですので、 Aシートの行数が16384行までの場合に対応します。 ■VBAコード Private Sub CommandButton1_Click() '型宣言 Dim i As Long Dim myStr As String 'Bシートの1行目をシフトダウン Worksheets("Bシート").Range("1:1").Insert shift:=xlShiftDown 'AシートのA列末尾まで繰り返し処理 For i = 1 To Worksheets("Aシート").Cells(Rows.Count, "A").End(xlUp).Row 'AシートA列の値を変数に格納 myStr = Worksheets("Aシート").Cells(i, "A") '変数から":"を検索して、右側を抜出して格納し直し myStr = Right(myStr, Len(myStr) - InStr(1, myStr, ":")) 'Bシートの1行目に変数を出力 Worksheets("Bシート").Cells(1, i) = myStr Next i 'Aシートの値削除 With Worksheets("Aシート") .Range(.Cells(1, "A"), .Cells(Rows.Count, "A").End(xlUp)).ClearContents End With End Sub ■追記 Right関数は「指定した文字列」を「指定した文字数」から「文字数」分だけ抜き出すため、 Len関数と組み合わせて使う必要がありますので、No1さんのコードでは求める結果にならないかと。
その他の回答 (1)
- usami33
- ベストアンサー率36% (808/2210)
判りやすい様に、一行、位置処理で書いてます。 必ず10文字目以降なら 1 2 3 45 6 7 8 9 ご利用ID :99 Dim str1 As String Dim str2 As String str1 = Application.Transpose(Worksheets("Aシート").Range("A1")) str2 = RightB(str1, 10) ' 10文字目から右を切り出す Worksheets("Bシート").Range("A1").Value = str2 「:」を探すなら Dim N As Long Dim str1 As String Dim str2 As String str1 = Application.Transpose(Worksheets("Aシート").Range("A1")) N = InStr(str1, ":") str2 = RightB(str1, N+1) ' 10文字目から右を切り出す Worksheets("Bシート").Range("A1").Value = str2
お礼
usami33様 ご回答ありがとうございます! 焦って書いていたためBシートへはA1,B1,C1と展開されるのが 正しかったのですが、改変すればできるかもしれないと 思いました。 まだ試せてないのですが、本当にありがたく、 心より御礼申し上げます。
お礼
eden3616様 ありがとうございます。今、回答拝見させて頂きまして、 取り急ぎ御礼申し上げます。 あと、すみません!焦って書いていたため、ご指摘通り BシートのA1,B1,C1・・・と横に展開されるのが 正しいです。 お気づき頂きましてありがとうございます。 まだ試せてないのですが、できそうな感じがします! またご連絡させて頂きます。よろしくお願い致します。