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

解決済みの質問

エクセルVBA 1つのシートで出来ますか?

説明が下手で申し訳ございませんが、宜しくお願い致します。

sheet(1)に20個のボタンがあります。
ボタンをクリックすると、別のシートが開きます。
開いたシートにも複数のボタンがあり、そのうちの任意のボタンをクリックすると、そのボタンの値がsheet(1)のそれぞれのボタンに対応したセルに入力される、という動作を実現したいと思っています。

現状、下記のようなコードで目的の動作は実現できてはいるのですが、各ボタンそれぞれにシートを作っているような状況です。(データ自体は全く同じ内容のものが、計20シート)
たぶん、もの凄く頭の悪い事をやっているんだろうと思います。

sheet(1)を除いた各シートの入力データ自体は全く同じなので、シート一枚で出来るんじゃないのかなと思い、ネットや本で調べながら色々試してみたのですが、どうも上手く行きません。データが同じでも、sheet(1)のクリックしたボタンによって入力するセルを変えなければならないのが問題です。

sheet(1)のボタンとセルの関連付けや、sheet(1)のどのボタンを押したのかの判別ができればいいのかなと思って調べてみても、初心者にはよく理解できず、もう何週間もチャレンジしているのですがお手上げです。

上級者の方の知恵をお借りできれば幸いです。



Sub sheet2を開く()
Worksheets(2).Select
End Sub


Sub 入力1()
Worksheets(1).Range("F8") = "データ1"
Worksheets(1).Select
End Sub

Sub 入力2()
Worksheets(1).Range("F8") = "データ2"
Worksheets(1).Select
End Sub

Sub 入力3()
Worksheets(1).Range("F8") = "データ3"
Worksheets(1).Select
End Sub



Sub sheet3を開く()
Worksheets(3).Select
End Sub


Sub 入力1()
Worksheets(1).Range("H8") = "データ1"
Worksheets(1).Select
End Sub

Sub 入力2()
Worksheets(1).Range("H8") = "データ2"
Worksheets(1).Select
End Sub

Sub 入力3()
Worksheets(1).Range("H8") = "データ3"
Worksheets(1).Select
End Sub



Sub sheet4を開く()
Worksheets(3).Select
End Sub


Sub 入力1()
Worksheets(1).Range("M8") = "データ1"
Worksheets(1).Select
End Sub

Sub 入力2()
Worksheets(1).Range("M8") = "データ2"
Worksheets(1).Select
End Sub

Sub 入力3()
Worksheets(1).Range("M8") = "データ3"
Worksheets(1).Select
End Sub

   ・
   ・
   ・
   ・
   ・

投稿日時 - 2013-10-10 07:11:18

QNo.8299458

困ってます

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

gon2014さん
こんにちは。

命令はもっとコンパクトにできますが、今のプログラムを使用して使用シートを2つに限定するように修正すると以下の通りになります。

Public 目標セル As Range

Sub sheet2を開く()
 Set 目標セル = Range("F8")
 Worksheets(2).Select
End Sub

Sub sheet3を開く()
 Set 目標セル = Range("H8")
 Worksheets(2).Select
End Sub
     :
     :
Sub 入力1()
 目標セル = "データ1"
 目標セル.Select
End Sub

Sub 入力2()
 目標セル = "データ2"
 目標セル.Select
End Sub

Sub 入力3()
 目標セル = "データ3"
 目標セル.Select
End Sub

注)
・テストはしていません。
・サブルーチン名は変更した方が分かりやすいかと思います。
 sheet2を開く → btnXXXXXX_Click
 XXXXXXには分かりやすい名前を付けて下さい。

お試し下さい。

投稿日時 - 2013-10-10 10:44:11

補足

早々のご回答ありがとうございました。
お礼がおそくなって申し訳ありません。

一番目の方に教えていただいたものを試し終わりましたので、明日か明後日に、jcctaira様に教えて頂いたものを試してみます。

後日報告を兼ねて、改めてお礼させて頂きます。

投稿日時 - 2013-10-11 23:34:20

お礼

出来ました!
まさに望んでいたことが出来ました!
感謝感激です。
これでファイルがスッキリします。
ありがとうございました!

投稿日時 - 2013-10-12 13:15:45

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

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

回答(2)

ANo.1

>ボタンをクリックして開く別のシートにも複数のボタンがあり、その
>うちの任意のボタンをクリックすると、そのボタンの値がsheet(1)の
>それぞれのボタンに対応したセルに入力・・・

ボタンの値って何でしょうか。ボタンのある行の特定セルの値ですか?
また、sheet(1)のそれぞれのボタンに対応したセルとは?

ご質問の文章だけでは正確な状況がわかりませんの、とりあえずマクロ
記述を少なくする参考例です。

Sheet2に下図のようなレイアウトでボタンとデータがあるとします。
ボタンはすべて[フォーム]のボタンであることが前提です。

ボタンすべてに、次のマクロを登録します。
-------
Sub Test()
 Dim nm As String, ad As String
 nm = ActiveSheet.Shapes(Application.Caller).Name
 ad = ActiveSheet.Buttons(nm).Caption
 Worksheets("Sheet1").Range(ad).Value _
   = ActiveSheet.Buttons(nm).TopLeftCell.Offset(0, -1).Value
End Sub
-------

ボタンをクリックすると、Sheet1 に
・Sheet2でクリックしたボタンの文字と同じ番地のセルに
・そのボタンの左隣りのセルの値が
入力されます。

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2013-10-10 09:15:08

お礼

早々のご質問ありがとうございました。
しかも図入りで感謝いたします。
初心者には難しいコードで理解するのに時間がかかりました。(まだよく理解できていませんが・・・)
教えていただいたとおりにやってみて、動作はわかったのですが、求めていたものとは違うものでした。
私の説明が下手なせいだと思います。
せっかくお時間をとっていただいたのに申し訳ないです。

でも教えて頂いたコードは別件で役に立ちそうです。思いがけず良いコードを学ぶことができました。

今回のものについては、もう少し頑張ってみます。
ありがとうございました。

投稿日時 - 2013-10-11 23:31:32

あなたにオススメの質問