エクセル(Excel)vbaでの変換補助マクロ

今回は面白いものを作りました。
Excelでのファジー変換です。ファジーとはあやふや、という意味です。
ダウンロードはこちらから

図で説明します。

まずは設定です。ある企業とします。支店番号001が北海道支店、山田さん、支店番号002が鈴木さんの担当、と言った感じです。
settingシートで設定しています。

今度は入力です。sheet1に移り、一部を入力して下さい。北海道なら「北海」「hokkai」「かいどう」等、何でも構いません。
(settingシートのB列なら何でもいいです)

Enterを押すとフォームが出てきますので、選択して、Enterを押して下さい。

北海道が入力されました。続けて次は「ka」で行ってみます。
osakaの「ka」、hokkaidoの「ka」のため、候補が2つです。先ほどと同じように選択してenterを押して決定して下さい。

今度は関連付けている渡辺さんの名前を出します。また「ka」で大阪を選択し、F12を押して下さい。

見事、渡辺さんの名前が出てきました。

以上です。
一件vlookupで済むのでは?と思うかもしれませんが、
支店や取引先企業の名前が多少あやふやでも出てくる利便性、これは一度使うと虜になります。

更に…

支店名から支店コードを出すようにする
地名から支店一覧を出す
取引先の担当者さんの名前から取引先名、主な商品名を出す…

他にはローマ字でもひらがなでも何でも問題なく出てくる、この気楽さは他では得ることが出来ません。

ぜひ一度お試し下さい。
効率化を越えて、仕事が楽しくなります。

ダウンロードはこちらからです。

Excel・vbaの高速化まとめ

様々な高速化手段がありますが、今回は一般的なものをまとめました。

イベントを止める
Application.EnableEvents = False
再描画を止める
Application.ScreenUpdating = False
再計算を止める
Application.Calculation = xlCalculationManual
この3つだけでokです。

他にも色々ありますが、ほぼ速度は変わりません。

マクロ名:macro1をボタンから始動させる場合のテンプレートです。

ボタンでない場合も切り分けたほうが見やすいと思います。

他のページでも説明していますが、ボタンはActiveXではなくフォームコントロールを使用して下さい。

もしエラーで止まった場合は、コンソールで
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
この3つをコピーペースト、enterで実行して下さい。

vbaでメール。その3 メールファイル(.emlファイル)の文字コード

jisです。shift-jisではなく、jisという文字コードがあります。

vbaから使う場合はこちらの記事を参考に、CDOで処理することを強くおすすめします。

テキストとして処理しようとするととんでもなく大変です。

vbaでメール。その2 AttachmentとAttachmentsの違い。

vbaでメール操作をした時に躓いた点を書いておきます。

AttachmentとAttachmentsは別物。

Attachmentはoutlookのインスタンスを生成した時、使うもの。vbaでメールを送受信する時に使います。

そして添付ファイルを保存する場合、Saveasfileを使う。

詳細はMSDNを参考に。

Attachmentsは別物で、メールファイルを扱う時に使うもの。

そして添付ファイルを保存する場合、Savetofileを使う。

実際のコードはこちらを参考にして下さい。

vbaでメール。その1 メールファイル(.emlファイル)を操作。

vbaでメール受信は、「vba メール」などで検索すると

参考になるサイトが色々見つかります。

今回はそれではなく、vbaでemlファイルを操作する方法を記しておきます。

使い方
エクセルファイルと同じフォルダに.emlファイルを置き、
以下を実行するとファイルの内容をシート内に、同じフォルダに添付ファイルを展開します。

 

参考画像

マクロ適用前はこんな感じです。

フォルダ内にエクセルファイルとemlファイルのみ

適用後はこのように、シート内にメールの送信者、件名など。フォルダ内に添付ファイルをコピーします。

同じ名前の添付ファイルは上書きしますので、避けたい場合は

msg.Attachments(i).SavetoFile (ThisWorkbook.Path & “\” & msg.Attachments(i).Filename)

msg.Attachments(i).SavetoFile (ThisWorkbook.Path & “\” & CDbl(Timer) &

msg.Attachments(i).Filename)

などとして下さい(ミリ秒を付け加えています)

excel VBAのマクロ、ボタンが効かない その2(KB2596927、KB2553154、KB2726958)

2014/12/10のアップデートでエクセルのActiveXが効かなくなるアップデートがありました。

症状としては、ワークシートのボタンが押せない、ワークシートのセレクトボックスがおかしい、などがあります。

その1ではアンインストールする方法をお伝えしましたが、何らかの理由で無理、アップデートのアンインストールはやりたくない、と言う方はこちらの方法をお試し下さい。

 

最終的にやることは、ActiveXのボタン動作をフォームボタンに移植する、です。

作業前の一例です。sheet2のボタンを押して何かしらの処理、と言った感じです。

0

まずは移植先のフォームボタンを作ります。メニューの「開発」、「挿入」、フォームコントロールの四角ボタンを選択

2

ボタンを作りたい場所でドラッグします。後で移動、拡大縮小できるので多少大きめに作っておくと作業がしやすいです。

9999

突然ウィンドウが出てきます。新規作成をクリック。

4

するとまた突然ウィンドウが現れます。ここが「標準モジュール」内の「Module1」という移植先になります。移植先にいても仕方ないので、移植元にいきましょう。左側のsheet2をダブルクリックして下さい。

0

何やら色々と書いてあると思いますが、意味はわからなくても大丈夫です。

private sub commandbutton1_click()

endsub

の間をコピーします。

0

先ほどの「標準モジュール」内の「Module1」というところをダブルクリックし…

sub ボタン2_Click()

End sub

の間に貼り付ければ完了です。

0

 

動作確認して、うまく動けば嬉しい、楽しいです。いろいろ試行錯誤してみてください。また、これをきっかけにvbaを勉強するのも良いと思います。

 

0

 

それと最後にもう一つ、ボタンの調整方法です。右クリックでメニューが開きます。

テキストの編集で「ボタン2」などの表示を変更出来ます。

ボタンの角をドラッグすればサイズ調整、削除する場合はこの状態でescを押し、delキーで削除できます。

0

以上です。

excelのマクロ、ボタンが効かない その1(KB2596927、KB2553154、KB2726958)

2014/12/10のアップデートでエクセルのActiveXが効かなくなるアップデートがありました。

症状としては、ワークシートのボタンが押せない、ワークシートのセレクトボックスがおかしい、などがあります。

以下のアップデートをアンインストールして下さい。

アンインストール出来ない場合は、こちらの記事

excel2007 … KB2596927
excel2010 … KB2553154
excel2013 … KB2726958

Excel2010の場合、以下で元に戻ります。

1.スタートボタンのwindows updateを選択

8

 

2.kbb2553154をアンインストール(excel2007はKB2596927、excel2013はKB2726958)

1

この後、再起動が必要です。

今後もこういうアップデートが考えられますので、ActiveXを使わない方法があればそちらを検討したほうが良いと思います。