■問合せの内容
会社で毎日の営業の獲得成績をエクセルにフォームで入力出来る様にしたいのですかうまくできません。
フォームのテキストボックス1に日付
以下テキストボックスに獲得数字を入力し登録ボタンを押すとテキストボックスの日付をA列から探し一致した日にちの列の指定セルに入力していきたいです。
2007年 6月
A列 B列 C列
日付 リンゴ みかん
1日 3 5
2日 5 4
3日
と言った感じです。
入力するのは今月分ですのでフォームで選んだ日付が該当しない場合はエラーを出したいのですが。
宜しくお願い致します
No.3ベストアンサー
- 回答日時:
こんにちは!
横からお邪魔します。
VBAの場合、日付検索には注意が必要です。
表示形式によってコード変更が必要になる場合がほとんどだと思います。
質問文通りA列の日付はシリアル値で表示形式が d日 となっているとします。
該当データがある場合はその行のB列にテキストボックス2のデータを、C列にテキストボックス3のデータを入力するというコードです。
Private Sub CommandButton1_Click()
Dim c As Range
Set c = Range("A:A").Find(what:=Format(TextBox1, "d日"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
c.Offset(, 1) = TextBox2.Value
c.Offset(, 2) = TextBox3.Value
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox1.SetFocus
Else
MsgBox "該当日付なし"
End If
End Sub
※ A列の表示形式によって
>Format(TextBox1, "d日")
の部分で調整してみてください。
※ 表示形式だけでは「年・月」の判別ができませんので
今年・今月以外のデータでも「該当日付」はある!と判断してしまいます。
以上のコトを考慮すればA列の日付は最低限 7/3 のような感じにしておけば
少なくとも「月」の判断だけは可能です。m(_ _)m
No.4
- 回答日時:
No.2・3です。
投稿後エラー画面が出たので、ダブって投稿してしまいました。
No.2は無視してください。m(_ _)m
みーasです。前日はありがとうございました。データを蓄積していくことになり、今回はシートからシートに転記したいと思うのですが新しい質問を見て教えていただけますか?宜しくお願い致します。
No.2
- 回答日時:
こんにちは!
横からお邪魔します。
VBAで日付検索する場合、注意が必要です。
セルの表示形式によってコードの変更が必要になるコトがほとんどだと思います。
お示しのようにA列の日付はシリアル値で表示形式が d日 となっている前提です。
テキストボックス2のデータをB列、テキストボックス3のデータをC列に入力するとします。
Private Sub CommandButton1_Click()
Dim i As Long, c As Range
Set c = Range("A:A").Find(what:=Format(TextBox1, "d日"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
c.Offset(, 1) = TextBox2.Value
c.Offset(, 2) = TextBox3.Value
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox1.SetFocus
Else
MsgBox "該当日付なし"
End If
End Sub
※ A列の表示形式によって
>Format(TextBox1, "d日")
の部分で調整してください。
例えば 表示形式が d日(aaa) の場合はそのまま
>Format(TextBox1, "d日(aaa)")
といった具合になると思います。
※ 表示だけでは「年・月」の判別ができませんので、
今年・今月以外でも該当があればヒットします。m(_ _)m
No.1
- 回答日時:
一つのシートは一ヶ月分の入力を行う。
(質問文では 2007年6月分のシート)フォームを開いている時は、すでにこのシートがアクティブになっている。(ActiveSheet がこのシートを参照できる)
フォームの TextBox1 には日付の数値のみを入力する。(1 とか 15 とか)
シートの A列にある日付は、見た目には「1日」「3日」だが、セルには「1」とか「3」が入力されていて、セルの書式設定で「日」を付け足している。
という勝手な想像で書いてみました。
ユーザーフォームの TextBox1 に日付を表す数値 (1 とか 31 とか)を入力、TextBox2 や TextBox3 に実績値を入力。
コマンドボタンを押すと以下のコードを実施。
以下、ユーザーフォームのコードです。
GetTargetRow という関数を作り、フォームで入力した日付値の行が対象シートの A列に存在するかどうかをチェックし、存在する場合はその行番号を返すようにしました。
存在しなければ日付としては無効な値である 0 を返します。
あとはその行番号の B列と C列に実績値を入力します。
Option Explicit
Private Sub CommandButton1_Click()
Dim targetSheet As Worksheet
Set targetSheet = ActiveSheet
Dim targetRow As Long
targetRow = GetTargetRow(TextBox1.Value, targetSheet)
If targetRow = 0 Then
MsgBox "対象の日付が見つかりません。"
Else
targetSheet.Cells(targetRow, 2).Value = TextBox2.Value
targetSheet.Cells(targetRow, 3).Value = TextBox3.Value
End If
End Sub
Private Function GetTargetRow(aValue As Long, aTargetSheet As Worksheet) As Long
Dim exists As Boolean
exists = False
Dim searchRange As Range
Set searchRange = aTargetSheet.Range(aTargetSheet.Cells(2, 1), aTargetSheet.Cells(aTargetSheet.Cells(2, 1).End(xlDown).Row, 1))
Dim rng As Range
For Each rng In searchRange
If rng.Value = aValue Then
exists = True
Exit For
End If
Next
If exists Then
GetTargetRow = rng.Row
Else
GetTargetRow = 0
End If
End Function
ありがとうございました。
会社でやってみたのですがエラーとなってしまいます。
説明不足ですみませんが捕捉説明をいれたので宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【vba】日付の形式が勝手に変わってしまう。 1 2022/09/29 10:54
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) エクセルで30日以内に同内容の入力があったら色を付ける 2 2023/03/04 12:32
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- Visual Basic(VBA) 過去日付、年の切り替え 6 2022/05/26 12:41
- Excel(エクセル) セルに特定の色が出た時だけ、式を発動させたい 4 2022/06/17 10:32
- Excel(エクセル) Excel ある複数列に数値を入力した際に、別の列に本日の日付を入力したいです 7 2023/03/01 23:31
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Excelにて、ユーザーフォームで、日付けの範囲を指定し、検索しデーターを抽出し 別シートへ転記した
Excel(エクセル)
-
エクセルVBA ユーザーフォームのTextBoxを日付にしたい
Excel(エクセル)
-
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
-
4
エクセルVBA ユーザーフォームのtextboxの書式設定って?
Excel(エクセル)
-
5
UserForm1.Showでエラーになります。
工学
-
6
エクセルのVBAで日付を検索し転機したい
Visual Basic(VBA)
-
7
EXCEL・VBAフォームの日付(表示形式を変更したい)
Excel(エクセル)
-
8
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
9
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
10
EXCEL VBAのコンボボックスで日だけを表示する方法
Excel(エクセル)
-
11
VBAのオートフィルターで該当行がない場合に処理を止めたい
Excel(エクセル)
-
12
ユーザーフォームのラベルに日付を表示させる方法があればお願いします。出来ればコード書いていただけると
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA指定行削除
-
B列の最終行までA列をオート...
-
VBAで10行おきにセルの下に罫線...
-
Cellsのかっこの中はどっちが行...
-
VBAで指定範囲内の空白セルを左...
-
rowsとcolsの意味
-
VBAの初心者なのですが、「並び...
-
Excel VBA 足し算の問題を自動...
-
Excel VBA の件で質問です
-
難問 VBA 今日の日付より前に対...
-
空文字 "" ですが 空文字の意味...
-
エクセルについて
-
エクセル VBA 条件にあうセルの...
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
グリッドの列の最大値を求めたい。
-
エクセルVBAにて =A1=B1とすれ...
-
マクロ 最終列をコピーして最終...
-
【補足欄が足りなかったため、...
-
エクセルVBAで複数の条件を満た...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
文字列の結合を空白行まで実行
-
VBAのFind関数で結合セルを検索...
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
VBA 何かしら文字が入っていたら
-
Changeイベントでの複数セルの...
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報
回答ありがとうございます。
説明不足で申し訳ありません。
テキストボックスは2017/7/12と今日の日付が自動表示されるようになっており、スピンボタンで変更可能になっています。
エクセルシートも日にちと曜日で12(水)と表示されていますが、データは2017/7/12です。
教えていただいたvbaをいれるとエラーがでてしまいました。
どこを変更すればいいのですか?
またテキストボックスは日付がスピンボタンで変更できる様になっていて、エクセルの日付は土日、祝日をカラー変更される様にしてあるため、上の年、月から自動でカレンダーを出してあるため、データは2017/7/12です。
知識不足で申し訳ありません。
宜しくお願い致します。