- ベストアンサー
エクセルのマクロで出来ますか?
お世話になります。 あるセルを選択し、コマンドボタンをクリックすると別のシートにある詳細記入欄があるセルにジャンプし、入力が終わってまた違うコマンドボタンを押すと最初に選択したセルと別シートに記入した内容がリンク付けされているというものを作成したいと思っています。 一例をいうと、メインシート(点検チェックシート)、サブシート(点検詳細内容シート)があってメインシートのあるセルを選択してコマンドボタン(ユーザーカスタムで作成?)を押すと自動的にサブシートに飛びます。サブシートでは番号(通し番号)が振ってある表があり、上記のコマンドボタンを押すと自動的に新しいセルに記入でき、そしてさらに別のコマンドボタンを押すと、メインの最初に選択したセルにサブの番号が書かれて、次回からはその番号を押すとサブのシートに飛ぶといった実に都合のいい思いをもっています。 このことを実現しようとするとどのようなテクニックを駆使すればいいのか、ご教示いただけますか?
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1です・・・。 入れ違いで補足質問が・・。エラーは解決したのでしょうか?? >B列X行に飛ぶとそのまま入力ができるのでありがたいのですが、少しのカスタムでできるものでしょうか? すごく簡単です。 SubAddress:="点検詳細内容シート!A" & i, TextToDisplay:=Str(i) ↓ SubAddress:="点検詳細内容シート!B" & i, TextToDisplay:=Str(i) にすればいいです。 それと先頭行をタイトルとした場合は番号が1でも、行数は2になるので下記のようにして下さい。 SubAddress:="点検詳細内容シート!B" & i-1, TextToDisplay:=Str(i)
その他の回答 (7)
#1です。 サブシートの先頭行をタイトルの行にして下さい。 下記を新規に作成したブック内でテストしましたが、こちらではエラーにはなりません。 新規のブックで試しても同じでしょうか? Sub ボタン1() Sheets("点検詳細内容シート").Activate Range("B65536").End(xlUp).Offset(1).Select End Sub Sub ボタン2() i = Range("B65536").End(xlUp).Offset(, -1).Value Sheets("点検チェックシート").Activate ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", _ SubAddress:="点検詳細内容シート!A" & i, TextToDisplay:=Str(i) End Sub
お礼
ありがとうございます。 新しいブックで試したところうまくいきました。 ただ、サブシートの1行目をタイトル行にして、メインシートに出来たハイパーリンクをクリックすると、メインシートの番号-1行目のセルが表示されます。 先ほどの補足でお願いした件を含めて、ご一考いただけますでしょうか? 無理なお願いばかりですいません。よろしくお願い致します。
#1です。 >メインシートに採番された番号をクリック・・・するB列X行に飛ぶ、若しくはA列にとぶということです。 先ほどの回答でA列の番号のある行に移動するようになっています。 >1番が1行目っていうことですか? そうです。まぁ食い違っても補正すればいいだけのことですが。 >ただ、メインの行とサブの行は一致しません。 メインシートのあるセルを選択してコマンドボタンなので問題ないと思います。 >こんな説明でご理解いただけますでしょうか? 理解しました。前回の回答で解決できますね。
お礼
ご丁寧にご説明いただきありがとうございます。 早速試してみたところ、ボタン1をクリックすると 実行時エラー’1004’: Range クラスのSelect メソッドが失敗しました。 という、メッセージが出て、 Range("B65536").End(xlUp).Offset(1).Select が黄色くでてきます。 私が試したのは、メインシートにボタン1をサブシートにボタン2を貼り付け、サブシートのA列にはあらかじめ1~10程度の番号を振りました。 また、エラーメッセージを無視して、ボタン2を押すとメインの選択したセルには常に1(アンダーバー)が表示されるみたいです。この部分はまだエラーの過程なのでいいとして、最初のエラーメッセージはなにかやり方が間違っているのでしょうか。再度ご教示いただけるとありがたいです。 すごくやりたいことに近づいてきているようなので、期待しています。よろしくお願い致します。
補足
すいません。 先ほどのテストで1(アンダーバー)しかでないって件は1行目のセルにしか記入されていなかったからで、2行目以降を記入すると問題なく動いてくれます。 それと、わがままを言わせて頂くなら、サブシートに移ったときに、B列X行に飛ぶとそのまま入力ができるのでありがたいのですが、少しのカスタムでできるものでしょうか?無理をいってすいません。
#1です。 こういうことなのでしょうか? >次回からはその番号を押すとサブのシートに飛ぶといった これがよくわかりません。「点検詳細内容シート」の番号の行に移動すれば いいのでしょうか? 下記はメインの番号を押すとサブの該当する番号のセルに移動します。 但しサブの番号とシートの行が一致している場合です。 Sub ボタン1() Sheets("点検詳細内容シート").Activate Range("B65536").End(xlUp).Offset(1).Select End Sub Sub ボタン2() i = Range("B65536").End(xlUp).Offset(, -1).Value Sheets("点検チェックシート").Activate ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", _ SubAddress:="点検詳細内容シート!A" & i, TextToDisplay:=Str(i) End Sub
補足
ありがとうございます。 >>次回からはその番号を押すとサブのシートに飛ぶといった >これがよくわかりません。「点検詳細内容シート」の番号の行に移動すればいいのでしょうか? 欲をいうと、メインシートに採番された番号をクリックすると、サブシートのA列に振られていた通し番号に対応するB列X行に飛ぶ、若しくはA列にとぶということです。 サブの番号とシートの行が一致しているということは、1番が1行目っていうことですか?これはこれから作成ってことで、何とかなると思うのですが。 ただ、メインの行とサブの行は一致しません。メインの行が複数ある場合があります。(列が複数あるため) こんな説明でご理解いただけますでしょうか?
- yodakii
- ベストアンサー率18% (14/74)
回答に対する補足を読みました。 >すとあらかじめ通し番号の振ってある表 ということで、B列には、入力がされていないということですよね?私の回答の Worksheets("サブシート").Cells(Rows.Count, 1).End(xlUp).Row は、A列の入力されている行数になりますので、 Worksheets("サブシート").Cells(Rows.Count, 2).End(xlUp).Row とすれば、入力済みの件数が得られます。
- yodakii
- ベストアンサー率18% (14/74)
私の場合、ボタンを並べた「操作シート」を作成して、やっていました。 ユーザーフォームを作成して、入力する内容(点検詳細)の入力欄をテキストボックス等で作ります。 サブシートの点検詳細内容は、1件分が1行であると仮定するとサブシートに入力されている行数は Worksheets("サブシート").Cells(Rows.Count, 1).End(xlUp).Row という式で、得られます。つまり入力済みの件数が得られます。 With Worksheets("サブシート") .cells(入力行,入力項目番号).value=入力内容 ・ ・ ・ End With 等とすれば、サブシートに書き込めます。 書き換える場合は、入力されている行番号を、コンボボックスで、選択するようにすれば、その数を入力行とすれば、上記で作った物がほぼそのまま使えます。 端折って書いたので分かり難いかもしれませんが、どうでしょうか?
お礼
ありがとうございます。 ユーザーフォームを作成して、制御はそこで行い、サブシートのB列に入力された件数を探し、件数+1行目に書き込むってことですか? できれば、具体的にご教示いただければありがたいのですが。 また、書き込み後のハイパーリンクもご教示いただければ、理想に近い形になるような気がします。 エクセルはかなり初心者なので、見当違いかもしれませんが、よろしくお願いします。
- wakap
- ベストアンサー率14% (13/89)
結局はマクロ(VBA)を思考錯誤しながら作ることになると思いますので、単にテクニックというのはここでは説明しきれないかと・・・ ただ、上記に書かれている操作をそのままマクロとして記録した上で、過不足を修正する、というのがいいのではないかと思います。 メニューのツールからマクロを選択し、マクロの記録を選択してから上記の操作を行って登録すると、あとは適当なコマンドボタンにそのマクロをつけて実行すれば操作が再現されますよ
お礼
ありがとうございます。 エクセルのマクロは初めてです。 一度研究してみます。
>上記のコマンドボタンを押すと自動的に新しいセルに記入でき 意味がわかりません。 >次回からはその番号を押すとサブのシートに飛ぶといった実に都合のいい思いをもっています。 ハイパーリンクでしょうか? 可能だと思いますが、一体どこまでできているのでしょうか?
補足
早速のご回答ありがとうございます。 >>上記のコマンドボタンを押すと自動的に新しいセルに記入でき >意味がわかりません。 コマンドボタンを押すとあらかじめ通し番号の振ってある表で前回記入した番号+1のセルにジャンプするという意味なのですが。 1 ○○ 2 ○▲ 3 ←ここへ記入できるようにジャンプという意味なのですが。 >>次回からはその番号を押すとサブのシートに飛ぶといった実に都合のいい思いをもっています。 >ハイパーリンクでしょうか? 結果はそうなると思います。 AccessのVBAを少しかじった程度で、エクセルはまだ未経験です。最初はアクセスで作ろうとおもったのですが、表形式の記入が多い為、エクセルでチャレンジしようと思いました。現在、メインシートを作成中で、テクニカルな部分には未着手(出来ない!)の状態です。 以上、よろしくお願いします。
お礼
すいません。タイムラグがあるようで! 完璧なご指導のもと自身のスキルアップにもつながりました。本当にありがとうございました。