前提・実現したいこと
こんにちは。
Excelのマクロを作成中です。
初心者で調べても全くわからないので、ご教授ください。
P列の「sudo」という単語から始まるデータのみを抽出して、別のExcelファイルにコピーして貼り付けるコードを教えていただきたいです。
業務で、ある列のデータのみを抽出する必要があるのですが、ネットでもやり方がわかりません。
発生している問題・エラーメッセージ
コードがわからない。
該当のソースコード
なし
試したこと
オートフィルター機能も試してみましたが、特定の列のデータのみ抽出するやり方がわかりません。
補足情報(FW/ツールのバージョンなど)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
オートフィルタを使った手作業でもよいなら、検索ボックスにsudo*
と入れれば対象のもののみ抽出されます。
追記
不本意ですが基本的なコードを載せておきます。
VBA
1Dim wb As Workbook 2Dim ws As Worksheet 3Dim r As Long 4Set wb = Workbooks.Add ' 新規に作る場合 5'Set wb = Workbooks.Open "ブックファイル名" ' 既存ブックを開く場合 6Set ws = wb.Worksheets(1) ' 貼り付けたいシートを設定 7r = 1 ' 貼り付け先の開始行 8For Each c In Range("P:P") 9 If Left(c, 4) = "sudo" Then 10 ' A列にコピーしていく 11 ws.Cells(r, 1).Value = c 12 r = r + 1 13 End If 14Next
投稿2018/02/05 07:50
編集2018/02/05 08:05総合スコア16998
0
最初だけ新規ブックに貼り付けをして、二回目以降はその一回目に新規作成したブックに貼り付けるようにするには、どうすればよいでしょうか。
とのことですので、抽出結果.xlsファイルを作成するならこんな感じかなと思います。初心者様ということで、コメントいっぱいつけておきますので今後の足しにしてください。拡張子やファイル名は適当に変更してください。
vba
1 2Sub addcopy_v2() 3 4'抽出結果ファイルの名前を設定しています。2007以降であれば.xlsxとか使えますね。 5 6Const SaveName As String = "抽出結果.xls" 7 8'↓ここからはこれから使う変数を宣言してます。名称で何となく用途は想像してください。これは書いた人が勝手に決めます。 9'といっても何となく想像できる名前にしてあげることが大事です。ほかの人も使うことを考えると・・・。 10'私も得意ではないが・・・ 11 12Dim BaseWB As Workbook 13Dim BaseWS As Worksheet 14Dim WriteWB As Workbook 15Dim WriteSheet As Worksheet 16Dim CheckRange As Range 17Dim RangeBuf As Range 18Dim LastRow As Long 19Dim FSO As Object 20 21'ファイル探す為に、Scripting.FileSystemObjectオブジェクトを使います。 22'ほかにも方法はあると思いますが、慣れておいたほうがいいです。 23'参照設定(Microsoft scripting runtime)が必要な書き方。 24'Dim FSO As New Scripting.FileSystemObject 25 26'参照設定したくないならこの宣言 27Set FSO = CreateObject("Scripting.FileSystemObject") 28 29'検索対象のP列があるシート捕捉します。thisWorkbookは常にモジュール実行中(このコードが書いてあるほう)のブックを指します。そのワークシートインデックスが1のシートを捕捉。つまりBaseWbって分かりやすいように自分で決めた変数に格納して、後で色々いじくってやろうって魂胆です。 30Set BaseWS = ThisWorkbook.Worksheets(1) 31 32'上記で捕捉したBaseWSを使って、BaseWS.Range("P:P")と書くと、ThisWorkbook.Worksheets(1).Range("P:P")と同じ意味になります。 33'オブジェクトは階層を持っています。アプリケーション→ブック→シート→レンジって感じです。 34'辿るように操作したいセルにたどり着ければほぼ目的は達成できます。 35 36'↓heckRangeという変数に捕捉したワークブックのレンジを格納します。 37Set CheckRange = BaseWS.Range("P:P") 38 39'ご希望通り、2回目は追記(?)もしくは上書き動作になるように。抽出結果ファイルを自分と同じディレクトリで探します 40If FSO.FileExists(ThisWorkbook.Path & "\" & SaveName) = True Then 41 42 'もしあればそのブックを開きます 43 Set WriteWB = Workbooks.Open(ThisWorkbook.Path & "\" & SaveName) 44 45 'sheet1を捕捉します。 46 Set WriteSheet = WriteWB.Worksheets(1) 47Else 48 'なければ新規ブックを作成します 49 Set WriteWB = Workbooks.Add 50 51 'ActiveSheetを補足します。新規作成時においてsheet1を捕捉することになります。 52 Set WriteSheet = ActiveSheet 53End If 54 55'上記の処理で捕捉した抽出シートの最終行を探します。 56LastRow = WriteSheet.Cells(Rows.Count, 1).End(xlUp).Row 57If LastRow <> 1 Then LastRow = LastRow + 1 58 59'上書きならここで何らかの削除処理(シートごと消すのか、最終行から範囲を割り出して消すのか)今回は後者を書いておきます。 60'必要であればコメントを解除してください 61'========================= 62'With WriteSheet 63' .Range(.Cells(1, 1), .Cells(LastRow, 1)).ClearContents 64'End With 65' LastRow = 1 66'========================= 67 68'検索対象のP列があるシートの親、つまりブックをアクティブにします 69BaseWS.Parent.Activate 70 71'検索範囲をループします。 72For Each RangeBuf In CheckRange 73 74 'もし検索中のセルの先頭の4文字が"sudo"だったら、抽出シートの最終行に書き込みます。 75 If Left(RangeBuf.Value, 4) = "sudo" Then 76 WriteSheet.Cells(LastRow, 1).Value = RangeBuf.Value 77 78 '書き込み位置を次の位置にずらします。 79 LastRow = LastRow + 1 80 End If 81 82Next RangeBuf 83 84'保存しますか?的なメッセージを止めます。 85Application.DisplayAlerts = False 86WriteWB.SaveAs Filename:=ThisWorkbook.Path & "\" & SaveName 87WriteWB.Activate 88 89'保存しますか?的なメッセージを止めたのを元に戻します。処理実行後のアプリケーションの動作に影響が残るからです。 90Application.DisplayAlerts = True 91 92End Sub 93
投稿2018/02/05 13:20
編集2018/02/06 03:26総合スコア107
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/06 01:40
2018/02/06 01:53
2018/02/06 02:59
2018/02/06 03:18
2018/02/06 03:21
2018/02/06 04:13
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/05 07:55
2018/02/05 08:40
2018/02/05 08:42
2018/02/05 08:58
2018/02/05 09:00
2018/02/05 09:02
2018/02/05 09:16 編集
2018/02/05 09:18
2018/02/05 09:26
2018/02/05 09:26
2018/02/05 09:32
2018/02/05 09:37
2018/02/05 23:32
2018/02/05 23:40
2018/02/05 23:46
2018/02/05 23:53
2018/02/06 00:23 編集
2018/02/06 00:40