VBAを使ってCSVファイルから特定の行を抽出する
大量のCSVファイルと格闘する機会があった。しかも特定の文字列だけを抽出したいとのこと。。こんながっつり作業は久しぶり。力技でやろうかと考えたが、あまりのCSVファイルの数に挫折。自動化を考えることに( ゚Д゚)
CSVのファイルの数は多いが、幸いファイルサイズはさほど大きくなかった。そこでVBAで力技でやることに。ググってもいい感じの情報がサクッと見つからなかったので、将来CSVファイルと格闘する人のためにイケてないソースコードを公開する。
☆注意点☆
CSVのファイルサイズが大きいと動かないので要注意。なぜなら、考えるのがめんどくさく、ファイルオープンしてFINDしているからである。
[CSVファイルから特定の文字列が含まれる行を抽出するマクロ]
<準備1>
新規にxlsmファイルを作成。シートは以下二つを用意。
[検索値シート]
C1セルに”検索したいCSVファイル”が格納されているフォルダパスを入力
A列の2行目以降に検索、抽出したい文字列を記載。
サンプルのコードは完全一致。一行変えれば部分一致もできる。
マクロのボタンは、適当に配置。
[検索結果シート]
検索、抽出結果が出力されるシート
一行目のラベル(A~D列)は自分で事前に入力。二行目以降は自動で出力される。
- A~D列に、どのファイルをどの文字列で検索して、どこにあったかを出力
- F列以降は、検索対象文字列が含まれる行をそのまま出力
上記だと、”test"と"sampleって文字列を検索し、該当する行を抽出している。
検索対象のCSVファイルは以下の感じ。
↓test.csv↓
<準備2>
以下のコードを貼り付けて、search関数を実行すればおしまい。コメントの場所と改行をいじっているので動かなかったらごめんなさい。
ちなみに拡張子を変えれば、CSVファイルじゃなくてエクセルファイルでも検索、抽出はできる。(想定)
↓ここから
Sub search()
Application.ScreenUpdating = False 'ちらつき防止
Dim targetSheet As Worksheet'検索値があるシート
Dim outputSheet As Worksheet'検索結果を出力するシート
Dim outputSheetRowAddress As Integer ’検索結果を出力するシート
outputSheetRowAddress = 2
Dim searchSheet As Worksheet'対象データがあるシート
Set targetSheet = Worksheets(1)
Set outputSheet = Worksheets(2)
Dim File_Name As String
Dim fl_name As String
Dim DIR_PATH As String
Dim SourcePath As String
Dim Opnbook As Workbook
SourcePath = "C1"'検索元ファイルのPath定義
'検索元データの格納チェック
DIR_PATH = targetSheet.Range(SourcePath).Value
fl_name = Dir(DIR_PATH & "\*.csv*") 'ここ円マークです
If fl_name = "" Then
MsgBox "CSVファイルがありません。"
Exit Sub
End If
'指定フォルダにあるCSVファイルの数だけ検索を実行
Do
Dim sheetCount As Integer
Set Opnbook = Workbooks.Open(DIR_PATH & "\" & fl_name) 'ここ円マークです
sheetCount = Opnbook.Worksheets.Count
If sheetCount = 0 Then
MsgBox "シートがないへんなファイルです" & fl_name
Exit Sub
End If
'シートの数だけ検索を繰り返す。CSVファイルなので基本1つのはず。
For i = 1 To sheetCount
Dim row As Integer'検索値の最終行取得
row = targetSheet.Cells(targetSheet.Rows.Count, 1).End(xlUp).row
For k = 2 To row
Dim foundCell As Range'検索結果のセル
Dim searchCell As Range'検索値のセル
Set searchCell = targetSheet.Cells(k, 1)
If Not searchCell = "" Then'検索値が空白でなければ検索実行
Set foundCell = Opnbook.Worksheets(i).Cells.Find(searchCell, LookAt:=xlWhole, SearchOrder:=xlByColumns)'検索結果取得
If Not foundCell Is Nothing Then'検索値があったら以下実行
Dim FirstCell As Range
Set FirstCell = foundCell
Do
'検索値に一致した行をコピー
Opnbook.Worksheets(i).Rows(foundCell.row).Copy
'検索結果出力シートに張り付け
outputSheet.Rows(outputSheetRowAddress).PasteSpecial (xlPasteAll)
'空のセルを追加するためにA1を選択
outputSheet.Activate
outputSheet.Range("A1").Select
'ファイル名、シート名、行番号を入れるためにセルをずらす
outputSheet.Range(Cells(outputSheetRowAddress, 1), Cells(outputSheetRowAddress, 5)).Insert xlShiftToRight
outputSheet.Cells(outputSheetRowAddress, 1).Value = fl_name
outputSheet.Cells(outputSheetRowAddress, 2).Value = Opnbook.Worksheets(i).Name
outputSheet.Cells(outputSheetRowAddress, 3).Value = foundCell.Address
outputSheet.Cells(outputSheetRowAddress, 4).Value = searchCell.Value
'検索結果出力シートの貼り付け先の行を更新
outputSheetRowAddress = outputSheetRowAddress + 1
'次を検索
Set foundCell = Opnbook.Worksheets(i).Cells.FindNext(foundCell)
'次の検索結果が最初と同じかか存在しなかったら、次の検索処理へ
If foundCell.Address = FirstCell.Address Then
Exit Do
ElseIf foundCell Is Nothing Then
Exit Do
End If
Loop
End If
End If
Next
Next
'開いたファイルを閉じる
Application.DisplayAlerts = False
Opnbook.Close
fl_name = Dir
Loop Until fl_name = ""
'最後に罫線設定をして、オートフィルタ設定しておしまい
tmp = outputSheet.Range("A1").End(xlDown).row
outputSheet.Range("A1:D" & Format(tmp)).Borders.LineStyle = xlContinuous
outputSheet.Range("A2:D" & Format(tmp)).Interior.ColorIndex = 15
If outputSheet.AutoFilterMode = False Then
outputSheet.Range("A1:D1").AutoFilter
End If
End Sub
↑ここまで
久々にコードを書いて思ったのは、もう現場戻れないな。。。
変数の名前とかめんどくさくて”tmp1"とか"temp3"とか一回動いたら、そのまま放置してしれっとリリースすると思う。
先入観・型にはまらない転職活動のススメ
最近、IT系の仕事から少し脱線して、中途採用の仕事に携わる機会があった。
色々新しい発見があったので、紹介する。
その①:転職活動を就活の延長線と思っている人はお祈り率が高い
就活のようにそこそこの学歴があれば数打ちゃ当たると考えている人は改めた方がいい。不採用の確率が高く、時間を無駄に浪費するだけである。特に、
- 自己紹介、経歴紹介をテンプレート化して使い回すこと
をやっている人は、相当まずいと思ってもらって問題ない。
面接の時間は非常に短い。面接官に”あ、マッチしそうだな”と思わせる必要がある。当たり障りのない自己満的な紹介は不要。”自己紹介、職歴紹介”の中で、面接官に対して、
ここを深掘りしたい、ここの経験を詳しく聞きたい
と思わせる必要がある。この点に関しては、事前の準備、戦略の組み立てが必須。個人的には、各種紹介の後に面接官から質問がなかった場合、”刺さっていないと同意”であると考えている。
ただし、戦略と言っても難しいことではない。結構簡単なことなのに、やっていない人が多いため、差がついている現状がある。
- 応募職種、ポジションの募集背景を自分の言葉で具体的に説明するできるようにする
- 自分の経歴、スキル、志向と照らし合わせFitできるもを探す
- Fitしたものを具体的な例を持って説明、紹介できるようにする
- NG例:臨機応変に対応して、課題解決を推進した
- OK例:OSの構築経験、スキルを踏まえ、課題を可視化し、アプリ担当者を巻き込んで課題解決を推進した。
すごい当たり前なことだ思う人もいるかもしれないが、”この当たり前”ができていない人が本当に多い。
経歴は新しいものから紹介しないとダメだ
短く端的に説明することが大切なため、具体的なプロセスは後で話そう 等々
先入観に囚われ、相手目線が欠落していないかよく考える必要がある。
その②:仕事と転職活動は全く別物と考えている人は残念率が高い
仕事をしている中で、
- あの上司は全然資料を読んでくれない
- 会議資料を事前に送付しているのに目を通してくれない
- 結局使われるのは、サマリ資料の1枚だけ
って思いをする人はちょこちょこいる想定。なので、自分の仕事を進めるために、創意工夫を凝らしているはずだ。
なのに、何故か転職活動になると、
- 事前に応募書類は読み込んでもらっているはずだ!
- ある程度、スキル・経験を書類上の内容は理解している上で質問されているはずだ!
といった、謎の前提を置いている人が多い。
転職の面接となると、面接官として、現場のリーダーやマネージャーが出てくることが多い。自分の上司に照らし合わせてもらえれば一番しっくりくると思うが、
- 書類を事前に読み込んでくれるだろうか?
- 質問事項をあらかじめ用意してくれるだろうか?
答えは”NO”である。もちろん、事前に応募書類は読み込むべきである。しかし、残念ながら、リーダークラスは常に120%ぐらい稼働しており、時間が裂けない現実がある。
ってなると、伝える側は丁寧にならざるを得ない。
- 職務経歴書に書いてある通り〜〜〜です。
- 志望動機に書いてある通り〜〜です。
って言ったところで、あんま読んでないので”この人何言ってるんだ??”ってなる。特に、職務経歴書は、人によっては10枚近くあったりするので、余計に?????な感じになる。
しかも職務経歴書はなぜか知らないが、ワードのフォーマットて非常に読みづらい。今だに使われている理由が不明。
- 秘書を通じやっとのことで会議調整ができたリーダー層、経営層への報告の場で、あのワードの形式の報告書を使ってプレゼンしますか?
って質問したら、大体の人が”NO”と答え、”伝えたいことをまとめたサマリ資料を用意する”と答えるはずである。
転職面接の場も同じである。”今回の応募のために作ったサマリ資料”を手持ちしておけば良いだけの話。ただし、サマリを闇雲に出すのではNGである。営業活動を思い出してもらいたい。
- 聞いてもいないことを資料を出して、喋りだし、押し売りされる
そんなことされたら不信感が募るだけである。出すタイミングが肝要。自然の流れに任せるべき。用意したものが無駄になる可能性があるが、そこはしっかり我慢をする。
仕事で大事な報告をする時、想定質問を考え、手持ち資料、Appendixを何枚も用意したけど、結局使わなかった。ってのはあるあるなこと。逆に、労力(プロセス)をアピールしようとして、聞かれてないことをダラダラ話したら、評価がよくなかった。ってのもあるあるなこと。
転職活動も全く同じである。
私個人の考えであるが、転職活動は仕事の延長線上である。売り上げを上げる、契約を勝ち取るためには、戦略が不可欠。転職活動も戦略が不可欠。
戦略が立てられない場合は、応募しない方がいい。相手は百戦錬磨の手だれ。すぐにボロが出てNGとなる。お互い時間がもったいない。
転職活動は、楽しみながらゲーム感覚でできる人もいれば、事情があって追い込まれながらやっている人もいる。後者の場合、精神的にも肉体的にも非常に辛いことが多々ある。そんな人に少しでも役に立てればと、、、、、
コモディディ化を唱えるコンサルがコモディディ化する矛盾
コンサルの大量発生
コンサルの大量採用が止まらない。世の中のエージェントの八割以上はコンサルの仲介業者なのでは?と思うぐらいである。
エージェントは笑いが止まらないはずだ。コンサルの給料がチキンレースかのように上昇し、支払われる手数料は割合も額も鰻登り。とりあえず転職を考えている人にコンサルを紹介。練習という立て付けで受けさせて内定を得る。採用難易度が駄々下がりしているので、数打ちゃあたる。提示される給料が良いので、勘違いさせて入社させる。求職者の将来なんて1ミリも考えていない。入社させるためにあの手この手で騙くらかす。
親身になって転職活動を支援している人もいるとは思うが、ごく少数派では?仮想通貨バブルと同じで、流れに乗り遅れまいと必死に営業営業。
こんなことになってしまっているのは、全て”DX(デジタルトランスフォーメーション)”って言葉に踊らされている人、企業がたくさんいるからだ。
DXバブルが弾けるきっかけ
今の株価は実態に伴わないバブルだという人がいるが、”DX”関連のことの方がよっぽどバブルである。何を言いたいかというと、
- 実態が全くない、成果が全く出ていない高単価の仕事
が世の中に溢れているってことである。一個あたりの利益が1円にも満たない何銭の世界で戦っている大企業が、平気で月単価数百万円のコンサルを使う。では、そのコンサルは費用に見合った仕事をしているのであろうか。
仮に、月単価200万のコンサル3人を6ヶ月使った場合、合計で3,600万円のお金が必要。利益率を10%と仮定すると、売り上げとしては3億6,000万円必要となる。
そんな成果を出している人、ほとんど見たことがない。その3人にひたすら投資用マンションを売らせた方がよっぽど費用対効果が良さそうな気がする。しかも、月単価200万は、大手コンサルだとジュニアレベル。対してもスキルもないジュニアがググって調べて作った資料に3,600万円払っているようなものである。
そろそろ経営者の人たちも
- あれ?コンサル高くね?何も成果出てなくね?
って気が付く人が増えてくると思われる。その時が、DXバブル崩壊の時である。継続の契約を勝ち取ることができず、契約期間満了に伴い、コンサルはお払い箱になる。
DXバブル崩壊後の世界
想像するのは非常に簡単。需要と供給が逆転して、コンサル余りになるだけである。よくコンサルはベンチャーや事業会社で引っ張りだこというが、それは昔の話。
パワポのお絵かきしかできず、専門性もなければスキルも低いコンサルをわざわざ雇う理由がない。本質的な仕事をしてきた人は一瞬でその判別がつく。書類選考は比較的に通りやすいかもしれないが、面接となったらすぐに何もできないことが露呈してしまう。
歳をとれば取るほど悲惨である。採用面接で、”即戦力としてあなたは何ができますか?”と質問されても、
- ググったことを綺麗にパワポにまとめることができます
- コミュニケーションハブになれます
- 会議のファシリテートができます
- 見栄えが良い数字を作ることができます 等々
中身のないことしかアピールできない。30歳近くになれば、やる気元気は求められない。やる気元気は大前提でプラスアルファの専門性が求められる。しかも、コンサルの給料が良いからそれに似合った職となると、さらに専門性が求められる。
それなりの規模の事業会社では、専門性はなくとも、フットワークが軽く、コミュニケーション能力が高い人は一定数いる。なので、わざわざその層を中途採用で補填する必要がないのである。
求められるのは、難しい課題、未知の領域への挑戦の際にピンポイントで成果が出せる専門性と高いスキル。そもそも、そんなもの持ってたら、いくらDXバブルが崩壊したとしてもコンサルとして食っていける。結局のところ、余りものとなってしまったコンサルだけの問題になる。無限ループ。
コンサルを目指している人へのアドバイス
日常生活ではあまり偉そうなことは言えないのだが、ブログということで思ったことをストレートに書いてみる。
新卒でコンサルを目指している人向け
一般的なビジネススキルを素早く身につけられるのは確か。ただし、昨今の働き方改革の恩恵?もあり、死ぬほど働ける環境ではない。特に大手や有名どころでは顕著である。なので、思ったほどすぐに成長できる環境ではない。本当にがむしゃらに働きたいんだったらベンチャーに行くべき。資金繰りに困ったりしたら、休んでいるわけにはいかないので、必然的に仕事せざるを得ない環境に追い込むことができるからだ。
専門性は全く身につけることができない。個人の努力次第ではどうにかなるが、仕事でしか身につかないことも多いので、どうしても薄くなってしまう。
長くいればいるほど、給料が上がって出づらくなる。2、3年働いて、サクッと本当にやりたいことを見つけて、転職するのが吉。特に、第二新卒カードを使える期間が勝負。それを過ぎると、転職したくてもできなくなる可能性が高い。
転職でコンサルを目指している人向け
<そもそも一芸がある人>
コンサルに入った方が良い。コンサルも事業会社もなんだかんだ求めているのは専門性。
絶対にやってはいけないのは、
一芸を無視して心機一転新しいことに挑戦する
である。専門性はとことん追求すべき。もちろん、芸の肥やしになると思われる新しいことはどんどんやるべき。ただし、あくまで軸は自分の持っている一芸。
給料も上げることができるし、自信にもつながる。いいこと尽くめ。
<一芸がない人>
オススメしない。無駄に時間を過ごすだけの可能性あり。現状維持は停滞なので、心機一転コンサルになるのは悪いことではないが、その前にもっとよく自己分析をすべき。
- お金と仕事どっちが大切なのか
- 本当にやりたいことはなんなのか
- そもそもやりたいことはなんなのか
- 今の仕事の不満な点はなんなのか
- その不満は今の仕事の中で解消できないのか 等々
就活生の自己分析は大して重要ではないが、転職する場合の自己分析は非常に重要と考えている。”時間”と”若さ”は取り戻せないからだ。就活生の場合は、嫌だったらさっさと辞めれば良い。やり直しはいくらでもきく。最強の武器である”若さ”があるのでどうにかなる。
その若さも残念ながら歳を追うごとに劣化していく。中途半端に歳をとった状態での選択ミスは致命的というか、精神的ダメージが大きい。ポジティブ思考だったら、思い立ったら吉日で即行動も良いが、、、
給料もあげたい、一生ものの専門性を身につけたいってのは、実現しないので、冷静になってどっちを優先したいか真剣に考えるべき。二兎を追うものは一頭も得ず。
最後に、、、
いつも通り、なんかまとまらない文章になってしまったので、一旦これでおしまい。
何が言いたかったかっていうと、バブルは弾けると危ないよ!ってだけ。
それをどう思うかも、人それぞれ、個人次第。