› S・M・C (Simple.Macro.Create) ~エクセルマクロ日記~ › 2009年09月
2009年09月30日
エクセルマクロ(VBA):文字列編集3
今日は、ちょっとおもしろい依頼ありました。
一つのセルに連続で入力された10桁以内の数字(番号)を
1桁ずつ右詰めで一つのセル毎に振り分けほしいとの事です。
<基本番号を右詰めで編集する>
<こんな感じでしょうか>
以前に別件で、
名簿から年賀状を作る際に郵便番号の編集でやった事があるので
そう難しいものではありませんでした。
今回のポイントは、Offset命令でしょうか。
< プログラム >
Sub test()
gyo1 = 3
Do Until Range("a" & gyo1) = ""
Set bango = Worksheets("sheet1").Range("m" & gyo1)
St = Worksheets("sheet1").Range("a" & gyo1)
cnt1 = Len(St)
cnt2 = Len(St)
cnt3 = -1
For cnt = 1 To 10
If cnt <= cnt2 Then
bango.Offset(0, cnt3) = Mid(St, cnt1, 1)
Else
bango.Offset(0, cnt3) = ""
End If
cnt1 = cnt1 - 1
cnt3 = cnt3 - 1
Next cnt
gyo1 = gyo1 + 1
Loop
End Sub
< 結果 >
出来ました。
桁毎に都道府県別とか産業別とかの意味を持っていて、
エクセルの関数で振り分けていた様ですが、
次担当する方がそこまでは出来ないらしく、
自動的に「ボタン一つ」で出来る方法という事で
お願いされたものです。
これで、後任の方も本来の仕事に集中できますね。
一つのセルに連続で入力された10桁以内の数字(番号)を
1桁ずつ右詰めで一つのセル毎に振り分けほしいとの事です。
<基本番号を右詰めで編集する>
<こんな感じでしょうか>
以前に別件で、
名簿から年賀状を作る際に郵便番号の編集でやった事があるので
そう難しいものではありませんでした。
今回のポイントは、Offset命令でしょうか。
< プログラム >
Sub test()
gyo1 = 3
Do Until Range("a" & gyo1) = ""
Set bango = Worksheets("sheet1").Range("m" & gyo1)
St = Worksheets("sheet1").Range("a" & gyo1)
cnt1 = Len(St)
cnt2 = Len(St)
cnt3 = -1
For cnt = 1 To 10
If cnt <= cnt2 Then
bango.Offset(0, cnt3) = Mid(St, cnt1, 1)
Else
bango.Offset(0, cnt3) = ""
End If
cnt1 = cnt1 - 1
cnt3 = cnt3 - 1
Next cnt
gyo1 = gyo1 + 1
Loop
End Sub
< 結果 >
出来ました。
桁毎に都道府県別とか産業別とかの意味を持っていて、
エクセルの関数で振り分けていた様ですが、
次担当する方がそこまでは出来ないらしく、
自動的に「ボタン一つ」で出来る方法という事で
お願いされたものです。
これで、後任の方も本来の仕事に集中できますね。
2009年09月26日
エクセルマクロ(VBA):突合せの処理
おはようございます。
昨日は、人間ドッグを受けてきました。
バリュームでの胃部検診ですが、
マイクを通して指示をする先生に
遊ばれているような気がしました。
「バリュームをごっくん、ごっくんと飲みましょう」
「右に3回、まわって~。もっと、もっと早く~」
「次は仰向けになって~・・これは、うつぶせですよ、天井をみるんですよ~」
「もう一度右に3回まわりましょう。(左に回ろうとすると)、お箸を持つ手はどちらですか~
(反対だと気付き右にまわると)、そう、そこが右ですよ」
なんて感じでした。
それでは、本題です。
前回からの続きです。
突合せの処理を、オートフィルターを使って処理する事にしました。
なんかすっきりしない方法ですが、今のスキルでは思いつくのは
これしかありません。・・・ので
進めていきます。
入金データの「氏名」と「月」で請求データをオートフィルターにかけます。
存在すれば、入金データの入金額を請求データの入金額に編集。
なければ読み飛ばしとします。
入金データが空白になるまで繰り返し、終了後
請求データの入金額が空白のものをオートフィルター
にかければ、未収データが作れるはずです。
では、早速やってみましょう。
<イメージ>
プログラムはこんな感じでしょうか。
Sub 文字列抽出3()
Sheets("元帳").Select
With Worksheets("元帳")
gyo1 = 3
Do Until Range("a" & gyo1) = ""
Sheets("請求データ").Select
Sheets("請求データ").Range("a1:e1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:=.Range("g" & gyo1)
Selection.AutoFilter Field:=5, Criteria1:=.Range("h" & gyo1)
For Each c In Worksheets("請求データ").Columns(1).SpecialCells(xlCellTypeVisible)
If c.Row > 1 Then
If c = "" Then
Exit For
End If
Sheets("請求データ").Range("f" & c.Row) = .Range("k" & gyo1)
End If
Next c
Selection.AutoFilter
Sheets("元帳").Select
gyo1 = gyo1 + 1
Loop
End With
End Sub
それでは、実行してみます。
できました。
次に、請求データの入金額が空白のものをオートフイターにかけてみます。
< 未収データ >
未収データが表示されました。
大雑把ですが、流れとしてはこんな感じでしょうか。
あとは、綺麗に帳票編集して経理課に確認してみたいと思います。
返事が楽しみですが、OKならば、またまた一つ
「事務効率UP」に貢献です。
昨日は、人間ドッグを受けてきました。
バリュームでの胃部検診ですが、
マイクを通して指示をする先生に
遊ばれているような気がしました。
「バリュームをごっくん、ごっくんと飲みましょう」
「右に3回、まわって~。もっと、もっと早く~」
「次は仰向けになって~・・これは、うつぶせですよ、天井をみるんですよ~」
「もう一度右に3回まわりましょう。(左に回ろうとすると)、お箸を持つ手はどちらですか~
(反対だと気付き右にまわると)、そう、そこが右ですよ」
なんて感じでした。
それでは、本題です。
前回からの続きです。
突合せの処理を、オートフィルターを使って処理する事にしました。
なんかすっきりしない方法ですが、今のスキルでは思いつくのは
これしかありません。・・・ので
進めていきます。
入金データの「氏名」と「月」で請求データをオートフィルターにかけます。
存在すれば、入金データの入金額を請求データの入金額に編集。
なければ読み飛ばしとします。
入金データが空白になるまで繰り返し、終了後
請求データの入金額が空白のものをオートフィルター
にかければ、未収データが作れるはずです。
では、早速やってみましょう。
<イメージ>
プログラムはこんな感じでしょうか。
Sub 文字列抽出3()
Sheets("元帳").Select
With Worksheets("元帳")
gyo1 = 3
Do Until Range("a" & gyo1) = ""
Sheets("請求データ").Select
Sheets("請求データ").Range("a1:e1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:=.Range("g" & gyo1)
Selection.AutoFilter Field:=5, Criteria1:=.Range("h" & gyo1)
For Each c In Worksheets("請求データ").Columns(1).SpecialCells(xlCellTypeVisible)
If c.Row > 1 Then
If c = "" Then
Exit For
End If
Sheets("請求データ").Range("f" & c.Row) = .Range("k" & gyo1)
End If
Next c
Selection.AutoFilter
Sheets("元帳").Select
gyo1 = gyo1 + 1
Loop
End With
End Sub
それでは、実行してみます。
できました。
次に、請求データの入金額が空白のものをオートフイターにかけてみます。
< 未収データ >
未収データが表示されました。
大雑把ですが、流れとしてはこんな感じでしょうか。
あとは、綺麗に帳票編集して経理課に確認してみたいと思います。
返事が楽しみですが、OKならば、またまた一つ
「事務効率UP」に貢献です。
2009年09月23日
エクセルマクロ(VBA):突合せのキー
シルバーウィーク!結局、仕事でした。
子供達にはグチられっぱなしですが、
仕事がある分、感謝!感謝!
昨日の続きですが、
この未収リストの作成は以外と難しいですね。
各々違う目的のシステムからデータを持ってきて
突合せるのだから、比較する為の「キー」を作らなければ
いけない。
名前と月でなんとか「キー」らしきものを作りはしたが
肝心な未収リストを作るプログラムをどう組めばいいのか。
「名前」と「月」の2つの「キー」で突合せするには、
どんな方法あるのか。
まだまだ時間がかかりそうだ。
子供達にはグチられっぱなしですが、
仕事がある分、感謝!感謝!
昨日の続きですが、
この未収リストの作成は以外と難しいですね。
各々違う目的のシステムからデータを持ってきて
突合せるのだから、比較する為の「キー」を作らなければ
いけない。
名前と月でなんとか「キー」らしきものを作りはしたが
肝心な未収リストを作るプログラムをどう組めばいいのか。
「名前」と「月」の2つの「キー」で突合せするには、
どんな方法あるのか。
まだまだ時間がかかりそうだ。
2009年09月22日
エクセルマクロ:もうひと工夫
こんばんは!
今日は遅い更新となりました。
昨日からの続きですが、
請求データと入金(未収)データのキーになる
日付の部分が一致しないので、
もうひと工夫必要なようです。
今から考えてみたいと思います。
それでは。
今日は遅い更新となりました。
昨日からの続きですが、
請求データと入金(未収)データのキーになる
日付の部分が一致しないので、
もうひと工夫必要なようです。
今から考えてみたいと思います。
それでは。
2009年09月21日
エクセルマクロ(VBA):文字列の抽出②
おはようございます。
またまた、久しぶりの更新です。
今朝は4時半に起きました。
新聞を取りに外へ出たのですが、涼しいというか、
肌寒いというか、朝夕はもう秋という感じですね。
それに、空を見ると空気が透き通っているのか
星がとても綺麗に見えました。
久ぶりに気持ちいい朝を迎えられました。
本題です。
前回の続きですが、
ちょっと、間があきましたのでやりたい事の流れを説明します。
経理課で使う、「未収金リスト」を作る事が目的ですが、
経理ソフトからエクセルに書き出したデータと
請求ソフトからエクセルに書き出したデータの
突合せをして、請求に対し入金が無いデータの
一覧を出力するプログラムを作ります。
突合せするには、2つのエクセルデータに一致する項目が
なければいけません。
しかし、データの内容を見てみると、2つのデータには単純に
一致する項目はありません。
そこで前回の記事で書きましたが、
経理データの「名前と請求月」を編集して「キー」を作ってしまう
という方法で考えてみたいと思います。
イメージとして
このように、「名前」と「月」に分ける文字列抽出のマクロをつくります。
Mid関数とInStr関数を使います。
< マクロ >
Sub 文字列抽出1()
With Worksheets("元帳")
gyo1 = 3
Do Until Range("a" & gyo1) = ""
.Range("g" & gyo1) = Mid(.Range("f" & gyo1), 1, _
InStr(1, .Range("f" & gyo1), "(") - 1)
.Range("h" & gyo1) = Mid(.Range("f" & gyo1), _
InStr(1, .Range("f" & gyo1), "("), 6)
gyo1 = gyo1 + 1
Loop
End With
End Sub
それでは、実行してみましょう。
< 実行前 >
< 実行後 >
文字列を抽出して、「キー」が編集できました。
次回は請求データの「キー」を考えてみたいと思います。
またまた、久しぶりの更新です。
今朝は4時半に起きました。
新聞を取りに外へ出たのですが、涼しいというか、
肌寒いというか、朝夕はもう秋という感じですね。
それに、空を見ると空気が透き通っているのか
星がとても綺麗に見えました。
久ぶりに気持ちいい朝を迎えられました。
本題です。
前回の続きですが、
ちょっと、間があきましたのでやりたい事の流れを説明します。
経理課で使う、「未収金リスト」を作る事が目的ですが、
経理ソフトからエクセルに書き出したデータと
請求ソフトからエクセルに書き出したデータの
突合せをして、請求に対し入金が無いデータの
一覧を出力するプログラムを作ります。
突合せするには、2つのエクセルデータに一致する項目が
なければいけません。
しかし、データの内容を見てみると、2つのデータには単純に
一致する項目はありません。
そこで前回の記事で書きましたが、
経理データの「名前と請求月」を編集して「キー」を作ってしまう
という方法で考えてみたいと思います。
イメージとして
このように、「名前」と「月」に分ける文字列抽出のマクロをつくります。
Mid関数とInStr関数を使います。
< マクロ >
Sub 文字列抽出1()
With Worksheets("元帳")
gyo1 = 3
Do Until Range("a" & gyo1) = ""
.Range("g" & gyo1) = Mid(.Range("f" & gyo1), 1, _
InStr(1, .Range("f" & gyo1), "(") - 1)
.Range("h" & gyo1) = Mid(.Range("f" & gyo1), _
InStr(1, .Range("f" & gyo1), "("), 6)
gyo1 = gyo1 + 1
Loop
End With
End Sub
それでは、実行してみましょう。
< 実行前 >
< 実行後 >
文字列を抽出して、「キー」が編集できました。
次回は請求データの「キー」を考えてみたいと思います。