エクセルVBAの書き方を教えてください

最近の書き込み件数: 今日 0件、昨日 0件
未読分:4件

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)


Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

Message#4 2015年2月5日(木)17時24分
From: takkus
返事 削除 変更
今は、プロトタイプですから、こういうものを使って、細かい調整が必要になるかもしれませんし、また、大幅に変えたほうがよいかもしれません。まずはたたき台として、提示します。

個人的には、他にも方法もあるとは思っていますが、簡単なものを選びました。

・コードの貼り付け方と、使い方:
これは、Sheet2のタブを右クリックして、「コードの表示」をクリツクし、VBEの画面を出し、そこに貼り付けます。
使い方は、Sheet2のセルに一つ入金日を入れたら、Sheet1 側に番号を検索し、転機した入金日と検索された番号のセルに色を付けていくという方法です。入金したものと区別をつけるためで、同じ色がついているとマクロでは、コピー&ペーストができないようになっています。
実用度を増すために、エラー処理はいくつか施してあります。不要なら、取り去ってもよいです。

このコードは、キーを入力をした時に発生する信号で、マクロが起動するようになっています。

'//Sheet2 に貼り付ける
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim ws1 As Worksheet
 Dim ws2 As Worksheet
 Dim SrchTxt As Variant
 Dim c As Range
 Dim i As Long
 Const FCOLOR As Integer = 14 '濃い緑 フォントに色付け
 Set ws2 = Me
 Set ws1 = Worksheets("Sheet1")
 If Target.Column <> 4 Then Exit Sub
 If Not IsDate(Target.Value) Then Exit Sub
 If Target.Offset(, -1).Value = "" Then MsgBox "番号が見当たりません。", vbExclamation: Exit Sub
 SrchTxt = Target.Offset(, -1).Value
 ws1.Activate 'シートの切り替わり
 Set c = ws1.Columns(1).Find(SrchTxt, , xlValues, xlWhole)
 If Not c Is Nothing Then
  c.Select 'セルに飛ぶ
  If c.Font.ColorIndex <> FCOLOR Then
   c.Offset(, 1).Value = Target.Text
   c.Resize(, 2).Font.ColorIndex = FCOLOR
   i = Application.CountIf(ws1.Columns(1), SrchTxt)
   If i > 1 Then MsgBox SrchTxt & "は" & i & "個あるようです。", vbExclamation
  Else
   MsgBox SrchTxt & "は、既に入金済になっています。", vbExclamation
  End If
 Else
  MsgBox SrchTxt & "が見つかりません。", vbExclamation
 End If
 Set c = Nothing
 Set ws1 = Nothing
 Set ws2 = Nothing
End Sub
'//

なお、まとめて一気にやる方法は、コードが違いますから、その時は、その旨をおっしゃってください

Message#3 2015年2月5日(木)17時23分
From: yuki
返事 削除 変更
入金日付はD5セルではなく、D列の誤りですね?それ前提で回答します。
Sheet1B列先頭、ここではB2としますが、

=vlookup(A2, Sheet2!C:C, 2,0)

と入力し、1600行までズイッと引っ張ります。
あ、スミマセンVBAでしたか。やることは同じです。

Sub Macro1()
Dim Lastrow as Long
Lastrow=Cells(Rows.Count,1).End(xlUp).Row
Range("B2").Resize(Lastrow-1,1).Formula="=vlookup(A2, Sheet2!C:C, 2,0)"
Endsub

Message#2 2015年2月5日(木)17時23分
From: yuki
返事 削除 変更
入金日付はD5セルではなく、D列の誤りですね?それ前提で回答します。
Sheet1B列先頭、ここではB2としますが、

=vlookup(A2, Sheet2!C:C, 2,0)

と入力し、1600行までズイッと引っ張ります。
あ、スミマセンVBAでしたか。やることは同じです。

Sub Macro1()
Dim Lastrow as Long
Lastrow=Cells(Rows.Count,1).End(xlUp).Row
Range("B2").Resize(Lastrow-1,1).Formula="=vlookup(A2, Sheet2!C:C, 2,0)"
Endsub

Message#1 2015年2月5日(木)17時16分
From: goto
返事 削除 変更
エクセル2012を利用しています。
エクセルデータの入力で質問です。

例えばエクセルのSheet1に

A列
1-1-1
1-1-2
1-1-3
2-1-1
2-1-2
2-1-3
2-1-4
1600行ほどあります

Sheet2で日付ごとの入金表があります。
また、入金日付がD5セルにあります。
C列に
2-1-2
1-1-3
2-1-3
等にランダムに入力されている状態です。

Sheet1のB列に入金日を転記する場合エクセルのVBAでどのように記述すればよろしいでしょうか?

できれば汎用性のあるコードを教えていただけました幸いです。

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降

ExcelのVBAについてのQ&A掲示板

↑ExcelのVBA全般について分からない事があればこちらの掲示板よりご質問ください^^

VBAのInternetExplorer操作入門

↑ExcelのVBAをマスターできたら、エクセルVBAのIE(InternetExplorer)操作にも挑戦してみてください^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

エクセルVBAのステートメント

こちらでは、エクセルVBAの事例で利用したステートメントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

スポンサー リンク

エクセルVBAのオブジェクト

こちらでは、エクセルVBAの事例で利用したオブジェクトをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

スポンサー リンク

エクセルVBAのプロパティ

こちらでは、エクセルVBAの事例で利用したオブジェクトのプロパティをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのメソッド

こちらでは、エクセルVBAの事例で利用したオブジェクトのメソッドをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのイベント

こちらでは、エクセルVBAの事例で利用したオブジェクトのイベントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

dmb.cgi Ver. 1.068
Copyright(C) 1997-2014, hidekik.com