こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAのコードを見ていただけませんか

いつも、ここのサイトの方々には大変お世話になっております。ありがとうございます。

さてexcel2000で、dataというフォームにデータを格納し、メインのシートから、読みに行って編集するデータベースを作成しようとしています。
とあるサイトを参考にして、コードを作成しましたが、いくら頑張ってもどうしてもエラーが出てしまいうまくいきません。
どうか、コードのチェック・修正内容の提案等をいただけないでしょうか?よろしくお願いいたします。

(1)自分で登録した「IDが見つかりません」という表示しかでず、登録が出来ない
(2)dataシートのB列(2列目)が主キー(IDと呼んでいます) です。(メインのシートとデータを照合させる部分)
(3)メインのシートのIDはAL1~AQ1行セルまでを結合したセルに保管しています。
(4)下記コードでCommandButton1ボタンを「登録」と命名し、メインシートで入力したデータをdataシートに変更登録、新規に入力したデータも登録できるようにしたい。
(5)スピンボタンでIDを変化させて、メインフォーム上のデータも変化させたいけど、こちらも同種のエラーが出てしまう。

■以下コードです。
Private Sub CommandButton1_Click()
Dim fRange As Range
Dim fRow As Long
If (Range("AL1").Value = "") Then 'IDが入力されていない場合
MsgBox "IDを入力して下さい", vbExclamation
Exit Sub
End If
Set fRange = Sheets("data").Columns(2).Find(What:=Range("AL1").Value, _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
If (fRange Is Nothing) Then 'IDが見つからなかった場合
MsgBox "IDが見つかりません", vbExclamation
Exit Sub
End If
fRow = fRange.row 'IDの行位置を求める

Sheets("data").Cells(fRow, 1).Value = Range("AZ1:BE1").Value
Sheets("data").Cells(fRow, 2).Value = Range("AL1").Value
Sheets("data").Cells(fRow, 3).Value = Range("AA1:AO1").Value
Sheets("data").Cells(fRow, 4).Value = Range("D5:E5").Value
Sheets("data").Cells(fRow, 5).Value = Range("G5").Value
Sheets("data").Cells(fRow, 6).Value = Range("I5").Value
Sheets("data").Cells(fRow, 7).Value = Range("D5:F7").Value
Sheets("data").Cells(fRow, 8).Value = Range("G6:I7").Value
Sheets("data").Cells(fRow, 9).Value = Range("E8:E9").Value
Sheets("data").Cells(fRow, 10).Value = Range("G8:G9").Value
Sheets("data").Cells(fRow, 11).Value = Range("B11:I24").Value
Sheets("data").Cells(fRow, 12).Value = Range("B71").Value
Sheets("data").Cells(fRow, 13).Value = Range("C71").Value
Sheets("data").Cells(fRow, 14).Value = Range("B73").Value
Sheets("data").Cells(fRow, 15).Value = Range("C73").Value
Sheets("data").Cells(fRow, 16).Value = Range("B75").Value
Sheets("data").Cells(fRow, 17).Value = Range("C75").Value
  ’・・・・全部でfRow122まであります
End Sub

投稿日時 - 2011-07-18 19:09:29

QNo.6883799

困ってます

質問者が選んだベストアンサー

再度の回答となります。

このコードはinputシートのAL1にある値を、
dataシートの2列目(B列)から探しています。
見つからないので、質問のエラーが発生しています。

例えば、AL1に”abc123”と入力してボタンをクリックした際に、
dataシートのB列のどこかに”abc123”が見当たらないと、
質問のようなエラーとなります。

質問者さんは登録と更新をやろうとしているみたいですが、
このコードだと登録は出来ません。
あらかじめdataシートのB列の1行目に”abc123”と入力して
AL1に”abc123”と入力してボタンをクリックすると、
row122までの内容が正しく転機されると思います。

登録もしようとしたら、こんな感じかな?
ぱっと思いつきなんで、もっといい方法があるかもしれないです。
※質問者さんの求めている仕様が今一つ理解しきれていないので、あっているのか不安ですが。。。

Private Sub CommandButton1_Click()
Dim fRange As Range
Dim fRow As Long
If (Range("AL1").Value = "") Then 'IDが入力されていない場合
MsgBox "IDを入力して下さい", vbExclamation
Exit Sub
End If
Set fRange = Sheets("data").Columns(2).Find(What:=Range("AL1").Value, _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
If (fRange Is Nothing) Then 'IDが見つからなかった場合
Sheets("data").Range("B1").Select
Selection.End(xlDown).Select
fRow = Selection.Row + 1
'MsgBox "IDが見つかりません", vbExclamation
'Exit Sub
else
fRow = fRange.row 'IDの行位置を求める
End If

Sheets("data").Cells(fRow, 1).Value = Range("AZ1:BE1").Value
Sheets("data").Cells(fRow, 2).Value = Range("AL1").Value
Sheets("data").Cells(fRow, 3).Value = Range("AA1:AO1").Value
  ’・・・・全部でfRow122まであります
End Sub

投稿日時 - 2011-07-19 00:03:23

お礼

ご返事遅くなりました。今更ながら、自分の質問の仕方が悪かったと反省しております。

それにも関わらずこうして、nobutina様にお付き合いいただきまして感謝しております。本当にありがとうございました。

内容については、ご指摘いただいたとおり、dataシートのB列の一行目(タイトル行部分)に、AL1項目の内容を記載すれば、エラーが出ないことが確認できました。

残念ながら、ご提示いただいたコードでは 定義のエラーが出てしまいうまくいきませんでしたが、自分のコードの何が悪かったのかが、理解できたので良かったです。新規登録 と 変更登録 をしっかりと区分けして考えないといけませんね。

改めて、質問内容をコンパクトで明確に的を絞って投稿させていただきたいと思います。

またこの質問板については、もうしばらく回答をお待ちして、この質問を閉じさせていただきたいと思います。

色々とありがとうございました。

投稿日時 - 2011-07-19 19:07:14

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

ぱっと見問題ないように見えます。
ただし他の方が回答されているように、
Range("AL1").Value
がメインシートのAL1を指しているのかが怪しいです。

1.コマンドボタンはどのシートに貼り付けてありますか?
メインシートであれば問題ないのですが。。。

2.どのように実行していますか?「data」シートをみながらデバッグ実行していませんか?
それだとエラーになります。

3.ちょっと下の文の意味がわからない。
>下記コードでCommandButton1ボタンを「登録」と命名し
既に名前を変えているということですか?それとも名前を変えたい、ということですか?

コマンドボタンのcaptionをかえたい(変えた)のですか?オブジェクト名をかえたい(変えた)のですか?

オブジェクト名が変更済みである場合は、Private Sub CommandButton1_Click()ではなく他のsub関数が動いていると思います。

4.コンパイルはとおっていますか?VBAEditorのデバッグ→VBAProjectのコンパイル を試してみてください。

5.根本的な事を聞きますが、新規登録時には、dataシートのキーは登録済みですよね?
新規登録時にdataシートにキーが登録してなければIDは絶対に見つからないです。。。
つまり、最初にdataシートが空だったら、メインシートにどんな値をいれても見つからないです。。


ご質問の文だといろいろ不明な点があり、いろいろな可能性が考えられます。もう少し詳細に、かつ、質問の内容を絞ってもらうと答えやすいです。

投稿日時 - 2011-07-18 20:55:37

補足

すみません。書きもれました。
IDの入力セルは間違いなくメインシートのAL1です。

投稿日時 - 2011-07-18 21:25:35

お礼

回答ありがとうございます。
私の説明が至らない部分が色々とあるみたいですみません。その中で解決の糸口を示していただけるのは大変ありがたいです。


1.コマンドボタンはどのシートに貼り付けてありますか?
メインシートであれば問題ないのですが。。。
⇒メインのシートに貼り付けてあります。

2.どのように実行していますか?「data」シートをみながらデバッグ実行していませんか?
それだとエラーになります。
⇒メインのシート上のコマンドボタンを押しております。常に「IDが見つかりません」が表示されて、デバッグは実行できません。

3.ちょっと下の文の意味がわからない。
>下記コードでCommandButton1ボタンを「登録」と命名し
既に名前を変えているということですか?それとも名前を変えたい、ということですか?

コマンドボタンのcaptionをかえたい(変えた)のですか?オブジェクト名をかえたい(変えた)のですか?
⇒captionを「登録」に変えただけなので、直接は関係ないと思っています。関係ないなら書くべきではなかったかなと思っています。すみません。



オブジェクト名が変更済みである場合は、Private Sub CommandButton1_Click()ではなく他のsub関数が動いていると思います。
⇒オブジェクト名は触っておらず、「CommandButton1」のままでした。

4.コンパイルはとおっていますか?VBAEditorのデバッグ→VBAProjectのコンパイル を試してみてください。
⇒申し訳ありません。今やり方がわからないので、すぐには出来そうにありません。もしやり方が簡単ならば教えていただけないでしょうか?

5.根本的な事を聞きますが、新規登録時には、dataシートのキーは登録済みですよね?
新規登録時にdataシートにキーが登録してなければIDは絶対に見つからないです。。。
つまり、最初にdataシートが空だったら、メインシートにどんな値をいれても見つからないです。。
⇒・・・!?、えっ?ごめんなさい。キーの登録というのが分からないです。そんな操作があるのでしょうか?まさかそれが原因でしょうか?すみません。やり方を教えていただけないでしょうか?

投稿日時 - 2011-07-18 21:19:43

ANo.1

> If (Range("AL1").Value = "") Then 'IDが入力されていない場合
ここでいきなりつまづいているのでは?この時点で、どのシートが選択されていますか?

数行下では
> Set fRange = Sheets("data").Columns(2).Find(What:=Range("AL1").Value, _
のように、シートを指定してますよね?

仮にシート名が[input]であるならば
If (Sheets("input").Range("AL1").Value = "") Then 'IDが入力されていない場合
のように決めうちするどうなりますか?

投稿日時 - 2011-07-18 19:23:00

お礼

迅速な回答をありがとうございます。

>> If (Range("AL1").Value = "") Then 'IDが入力されていない場合
>ここでいきなりつまづいているのでは?この時点で、どのシートが選択されていますか?
メインのシート[input]に書き込んであるコードなので、シートの指定は不要だと、思っていました。

ご指摘の通り、メインのシート名[input]を盛り込んで、コードを修正しましたが、状況は変わりませんでした。
※元々メインのシート名は回答者様ご指摘の正に[input]でした。

投稿日時 - 2011-07-18 20:15:14

あなたにオススメの質問