【PR】


本広告は、一定期間更新の無いブログにのみ表示されます。
ブログ更新が行われると本広告は非表示となります。
  

Posted by TI-DA at

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


< 結果 >



出来ました。

桁毎に都道府県別とか産業別とかの意味を持っていて、
エクセルの関数で振り分けていた様ですが、
次担当する方がそこまでは出来ないらしく、
自動的に「ボタン一つ」で出来る方法という事で
お願いされたものです。

これで、後任の方も本来の仕事に集中できますね。ピース

  


Posted by ミール at 16:28Comments(0)VBA

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」に貢献です。


  


Posted by ミール at 10:31Comments(0)VBA

2009年09月23日

エクセルマクロ(VBA):突合せのキー

シルバーウィーク!結局、仕事でした。
子供達にはグチられっぱなしですが、
仕事がある分、感謝!感謝!

昨日の続きですが、
この未収リストの作成は以外と難しいですね。

各々違う目的のシステムからデータを持ってきて
突合せるのだから、比較する為の「キー」を作らなければ
いけない。






名前と月でなんとか「キー」らしきものを作りはしたが
肝心な未収リストを作るプログラムをどう組めばいいのか。

「名前」と「月」の2つの「キー」で突合せするには、
どんな方法あるのか。

まだまだ時間がかかりそうだ。
  


Posted by ミール at 19:28Comments(0)VBA

2009年09月22日

エクセルマクロ:もうひと工夫

こんばんは!
今日は遅い更新となりました。

昨日からの続きですが、

請求データと入金(未収)データのキーになる
日付の部分が一致しないので、
もうひと工夫必要なようです。



今から考えてみたいと思います。
それでは。  


Posted by ミール at 22:07Comments(0)VBA

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

それでは、実行してみましょう。

< 実行前 >


< 実行後 >


文字列を抽出して、「キー」が編集できました。

次回は請求データの「キー」を考えてみたいと思います。


  


Posted by ミール at 10:14Comments(0)VBA