重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

現在プログラムを作成しています。内容はシート1の各列に内容をいれて実行ボタンを押すとシート2のある行にコピーされるというものです。そのシート2にコピーされる場所というのが、A列に数字がランダムにふってありまして、
シート1のA1セルにたとえば『12』と打って、実行ボタンをおしたら、シート2のA列の中から『12』となっているセルを判別してその行に各項目をコピーしたいのです。
なので 今ほどいったようにシート1に『数字』をうって、シート2のA列中から判別するプログラムはどのようにすればいいのでしょうか?
本当に困っています。
おしえてください。おねがいします。

A 回答 (4件)

#1です。


#3の方が、考えているのはきっと逆で、
シート1ってのは、データと番号入力用のセル&実行ボタンが配置されているんでしょう。

ま、あんまりやりませんが。
当方も勘違いしていて、
データがシート2で、
シート1のA列に数値を入力すると勝手に
シート2の番号に対応する行がコピーされると思い込んでいました(^o^;

閑話休題。
ボタンクリックでやる場合では、実装方法が異なりますので、
プログラムの書き換えを。
Private Sub CommandButton1_Click()
Dim rng As Range
Dim iCount As Integer
iCount = 0
For Each rng In Sheet2.Range("A1:A65535")
If Val(rng.Value) = 0 Then
iCount = iCount + 1
If iCount >= 10 Then
MsgBox "見つかりませんでした。", vbOKOnly + vbExclamation, "失敗"
Exit Sub
End If
Else
If Val(rng.Value) = Val(Sheet1.Range("A1").Value) Then
Sheet2.Cells(rng.Row, 4).Value = Sheet1.Range("A2").Value
MsgBox "D" & rng.Row & "に値をコピーしました。", vbOKOnly + vbInformation, "成功"
Exit Sub
End If
iCount = 0
End If
Next
End Sub
こんな感じで。
    • good
    • 0
この回答へのお礼

何から何まで本当にありがとうございました。
お礼おそくなってすいません。
数えくらいないくらい助かりました。

お礼日時:2006/04/08 00:11

こんにちは。



こういった類の質問には直ぐ幾つかの回答がつくものなのですが。。。。
原因は質問からはポイントとなるシート1のレイアウトがはっきりしていないためだと思われます。

因みに当方は最初次のように解釈しました。

データはシート1の一行目だけに(この”だけに”が重要)入力
シート1に置いたコマンドボタンをクリック
シート1のA1の値でシート2を検索
ヒットしたらヒットした行にシート1の一行目をコピー

しかし、No2の回答の補足「シート1のA2の内容をシート2の行のD列に」を見て、
 
 ん???? 謎は深まるばかりなり。。。(^^;;;


質問、補足から別の解釈もできますがそれも自ずと限界があります。
もし一発必中の回答をお求めなら具体的なシート1のレイアウト(なるべく実例に沿った)をアップすることをお勧めします。

以上です。
    • good
    • 0

A1のみではなく、A列全体に数値を入力したら…って感じにしたんですが。


WorkSheet_Changeイベントは引数のTargetの値が変わったら発生するイベントなので、
最初のほうの
If Target.Column = 1 then

If Target.Address = Sheet1.Range("A1").Address Then
に変更すればA1セルだけの判定になります。

この回答への補足

本当にご回答ありがたく思います。なぞが解けました。
最後にもう1つだけ疑問がでてきてしまったのでそれだけ教えていただけないでしょうか??何度もすいませんm(_ _)m
このプログラムはシート2の行をシート1へコピーしていますが、
シート1のA2の内容を、、教えてもらったプログラムで判別して見つかったシート2の行のD列にいれたいのですが最後の部分をどのようなプログラムに書き換えればいいのでしょうか?

補足日時:2006/04/01 17:18
    • good
    • 0

Private Sub Worksheet_Change(ByVal Target As Range)


Dim lRow As Long
Dim lBlankCount As Long
'A列のみが対象
If Target.Column = 1 Then
'対象セルが0の場合Exit
If Val(Target.Value) = 0 Then Exit Sub

'空白カウント=0
lBlankCount = 0
'全行数分ループ
For lRow = 1 To 65535
'空白だったらカウントアップ
If Val(Sheet2.Cells(lRow, 1).Value) = 0 Then
lBlankCount = lBlankCount + 1
If lBlankCount >= 10 Then Exit For
'値が一致
ElseIf Val(Sheet2.Cells(lRow, 1).Value) = Val(Target.Value) Then
'その行の情報をセット
Sheet2.Range(Sheet2.Cells(lRow, 2), Sheet2.Cells(lRow, 255)).Copy
Sheet1.Range(Sheet1.Cells(Target.Row, 2).Address).PasteSpecial
Exit For
End If
Next
End If
End Sub

この回答への補足

プログラムを教えていただき本当にうれしいです。わかりやすい説明もつけていただきましてm(_ _)m
一個だけ教えていただいてもよろしいでしょうか?
判別するプログラムは理解できたのですが、A1の情報はどのプログラムでよみとっているのでしょうか?

補足日時:2006/04/01 10:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!