• ベストアンサー

エクセルのマクロで出来ますか?

お世話になります。 あるセルを選択し、コマンドボタンをクリックすると別のシートにある詳細記入欄があるセルにジャンプし、入力が終わってまた違うコマンドボタンを押すと最初に選択したセルと別シートに記入した内容がリンク付けされているというものを作成したいと思っています。 一例をいうと、メインシート(点検チェックシート)、サブシート(点検詳細内容シート)があってメインシートのあるセルを選択してコマンドボタン(ユーザーカスタムで作成?)を押すと自動的にサブシートに飛びます。サブシートでは番号(通し番号)が振ってある表があり、上記のコマンドボタンを押すと自動的に新しいセルに記入でき、そしてさらに別のコマンドボタンを押すと、メインの最初に選択したセルにサブの番号が書かれて、次回からはその番号を押すとサブのシートに飛ぶといった実に都合のいい思いをもっています。 このことを実現しようとするとどのようなテクニックを駆使すればいいのか、ご教示いただけますか?

  • nkeis
  • お礼率57% (86/150)

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

  • ベストアンサー
noname#123709
noname#123709
回答No.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)

nkeis
質問者

お礼

すいません。タイムラグがあるようで! 完璧なご指導のもと自身のスキルアップにもつながりました。本当にありがとうございました。

その他の回答 (7)

noname#123709
noname#123709
回答No.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

nkeis
質問者

お礼

ありがとうございます。 新しいブックで試したところうまくいきました。 ただ、サブシートの1行目をタイトル行にして、メインシートに出来たハイパーリンクをクリックすると、メインシートの番号-1行目のセルが表示されます。 先ほどの補足でお願いした件を含めて、ご一考いただけますでしょうか? 無理なお願いばかりですいません。よろしくお願い致します。

noname#123709
noname#123709
回答No.6

#1です。 >メインシートに採番された番号をクリック・・・するB列X行に飛ぶ、若しくはA列にとぶということです。 先ほどの回答でA列の番号のある行に移動するようになっています。 >1番が1行目っていうことですか? そうです。まぁ食い違っても補正すればいいだけのことですが。 >ただ、メインの行とサブの行は一致しません。 メインシートのあるセルを選択してコマンドボタンなので問題ないと思います。 >こんな説明でご理解いただけますでしょうか? 理解しました。前回の回答で解決できますね。

nkeis
質問者

お礼

ご丁寧にご説明いただきありがとうございます。 早速試してみたところ、ボタン1をクリックすると 実行時エラー’1004’: Range クラスのSelect メソッドが失敗しました。 という、メッセージが出て、 Range("B65536").End(xlUp).Offset(1).Select が黄色くでてきます。 私が試したのは、メインシートにボタン1をサブシートにボタン2を貼り付け、サブシートのA列にはあらかじめ1~10程度の番号を振りました。 また、エラーメッセージを無視して、ボタン2を押すとメインの選択したセルには常に1(アンダーバー)が表示されるみたいです。この部分はまだエラーの過程なのでいいとして、最初のエラーメッセージはなにかやり方が間違っているのでしょうか。再度ご教示いただけるとありがたいです。 すごくやりたいことに近づいてきているようなので、期待しています。よろしくお願い致します。

nkeis
質問者

補足

すいません。 先ほどのテストで1(アンダーバー)しかでないって件は1行目のセルにしか記入されていなかったからで、2行目以降を記入すると問題なく動いてくれます。 それと、わがままを言わせて頂くなら、サブシートに移ったときに、B列X行に飛ぶとそのまま入力ができるのでありがたいのですが、少しのカスタムでできるものでしょうか?無理をいってすいません。

noname#123709
noname#123709
回答No.5

#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

nkeis
質問者

補足

ありがとうございます。 >>次回からはその番号を押すとサブのシートに飛ぶといった >これがよくわかりません。「点検詳細内容シート」の番号の行に移動すればいいのでしょうか? 欲をいうと、メインシートに採番された番号をクリックすると、サブシートのA列に振られていた通し番号に対応するB列X行に飛ぶ、若しくはA列にとぶということです。 サブの番号とシートの行が一致しているということは、1番が1行目っていうことですか?これはこれから作成ってことで、何とかなると思うのですが。 ただ、メインの行とサブの行は一致しません。メインの行が複数ある場合があります。(列が複数あるため) こんな説明でご理解いただけますでしょうか?

  • yodakii
  • ベストアンサー率18% (14/74)
回答No.4

回答に対する補足を読みました。 >すとあらかじめ通し番号の振ってある表 ということで、B列には、入力がされていないということですよね?私の回答の Worksheets("サブシート").Cells(Rows.Count, 1).End(xlUp).Row は、A列の入力されている行数になりますので、 Worksheets("サブシート").Cells(Rows.Count, 2).End(xlUp).Row とすれば、入力済みの件数が得られます。

  • yodakii
  • ベストアンサー率18% (14/74)
回答No.3

私の場合、ボタンを並べた「操作シート」を作成して、やっていました。 ユーザーフォームを作成して、入力する内容(点検詳細)の入力欄をテキストボックス等で作ります。 サブシートの点検詳細内容は、1件分が1行であると仮定するとサブシートに入力されている行数は Worksheets("サブシート").Cells(Rows.Count, 1).End(xlUp).Row という式で、得られます。つまり入力済みの件数が得られます。 With Worksheets("サブシート") .cells(入力行,入力項目番号).value=入力内容 ・ ・ ・ End With 等とすれば、サブシートに書き込めます。 書き換える場合は、入力されている行番号を、コンボボックスで、選択するようにすれば、その数を入力行とすれば、上記で作った物がほぼそのまま使えます。  端折って書いたので分かり難いかもしれませんが、どうでしょうか?

nkeis
質問者

お礼

ありがとうございます。 ユーザーフォームを作成して、制御はそこで行い、サブシートのB列に入力された件数を探し、件数+1行目に書き込むってことですか? できれば、具体的にご教示いただければありがたいのですが。 また、書き込み後のハイパーリンクもご教示いただければ、理想に近い形になるような気がします。 エクセルはかなり初心者なので、見当違いかもしれませんが、よろしくお願いします。

  • wakap
  • ベストアンサー率14% (13/89)
回答No.2

結局はマクロ(VBA)を思考錯誤しながら作ることになると思いますので、単にテクニックというのはここでは説明しきれないかと・・・ ただ、上記に書かれている操作をそのままマクロとして記録した上で、過不足を修正する、というのがいいのではないかと思います。 メニューのツールからマクロを選択し、マクロの記録を選択してから上記の操作を行って登録すると、あとは適当なコマンドボタンにそのマクロをつけて実行すれば操作が再現されますよ

nkeis
質問者

お礼

ありがとうございます。 エクセルのマクロは初めてです。 一度研究してみます。

noname#123709
noname#123709
回答No.1

>上記のコマンドボタンを押すと自動的に新しいセルに記入でき 意味がわかりません。 >次回からはその番号を押すとサブのシートに飛ぶといった実に都合のいい思いをもっています。 ハイパーリンクでしょうか? 可能だと思いますが、一体どこまでできているのでしょうか?

nkeis
質問者

補足

早速のご回答ありがとうございます。 >>上記のコマンドボタンを押すと自動的に新しいセルに記入でき >意味がわかりません。 コマンドボタンを押すとあらかじめ通し番号の振ってある表で前回記入した番号+1のセルにジャンプするという意味なのですが。 1 ○○ 2 ○▲ 3     ←ここへ記入できるようにジャンプという意味なのですが。 >>次回からはその番号を押すとサブのシートに飛ぶといった実に都合のいい思いをもっています。 >ハイパーリンクでしょうか? 結果はそうなると思います。 AccessのVBAを少しかじった程度で、エクセルはまだ未経験です。最初はアクセスで作ろうとおもったのですが、表形式の記入が多い為、エクセルでチャレンジしようと思いました。現在、メインシートを作成中で、テクニカルな部分には未着手(出来ない!)の状態です。 以上、よろしくお願いします。  

関連するQ&A

  • No.2046218の追加質問です。

    No.2046218の質問では、大変お世話になりました。 大変満足しています。 さて、今回の質問は、 前回の質問は、メインシート対サブシートの1対1についての質問でしたが、 今回は、メイン1、メイン2・…の複数のシートの内容をサブシートに関連付けるといったものです。 前回の回答をお借りして説明しますと、 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、メイン2からのサブへの対応は問題ないのですが、サブからメイン1あるいはメイン2に返すときに工夫が必要かと思います。 このあたりをパワーアップしたく、質問いたします。よろしくご教示ください。

  • エクセルマクロで参照して表示方法

    エクセルマクロを作成しているのですが、以下のようなものが作りたいです。 (1)1シート(メインシート)A1セルに「媒体1」「媒体2」が選択があります。 (2)1シートB1セルには管理番号「100-000-000」とあります。 (3)2シートには、管理シートがあり、以下のようになっています。  この管理シートには、A1セルに「管理番号」記載。B1には媒体名が記載されています。 ■質問 ・メインシートで、媒体1を選択した場合、管理シートを参照して、  管理番号を自動で呼び出すにはどうすればいいのでしょうか。  (既に100-000-001が登録してあった場合は、メインシートのB1セルには100-000-002にしたいです。) ・媒体2を選択した場合、管理シートを同じように参照します。  (既に200-000-005が登録してあった場合、メインシートのB1セルには200-000-006にしたいです。) ※いずれも該当する媒体の数字が大きいものに+1になります。 ※200-000-999だった場合、数字を繰り上げて、200-001-000にしたいです。 ご教授お願いします。

  • エクセルのマクロについて

    初心者の私ですが、エクセルでマクロについて教えていただきたいのですが、 質問1:コマンドボタン1をL6セルに作成。ボタン1(名称は”未”)をクリックするとF6からK6のセルが赤色反転する。さらにボタン名称が”済”に変わる。もう一度ボタン1を押すとセルの色は元に戻りボタン名称が”未”に戻る。このようなボタンは作成できますか? 質問2:さらに、そのボタンをシート内に多数作成したいのですが、コマンドボタン2をL7セルに作成。ボタン2(名称は”未”)をクリックするとF7からK7のセルが赤色反転する。さらにボタン名称が”済”に変わる。もう一度ボタン2を押すとセルの色は元に戻りボタン名称が”未”に戻る。コマンドボタン3をL8セルに作成。ボタン3(名称は”未”)をクリックするとF8からK8のセルが赤色反転する。さらにボタン名称が”済”に変わる。もう一度ボタン3を押すとセルの色は元に戻りボタン名称が”未”に戻る。・・・くりかえし・・・コマンドボタン250をL255セルに作成。ボタン250(名称は”未”)をクリックするとF255からK255のセルが赤色反転する。さらにボタン名称が”済”に変わる。もう一度ボタン250を押すとセルの色は元に戻りボタン名称が”未”に戻る。という具合にコピーしたいのですが、簡単な方法はありますか?

  • エクセル2007で コマンドボタンを使用してマクロ?で他のシートの内容

    エクセル2007で コマンドボタンを使用してマクロ?で他のシートの内容から選択するようにしたいのですが・・・ マクロ初心者です・・・ どのように説明したらよいかわからないのですが 例えば シート1で作成したデータを シート2でコマンドボタンを押すとシート1のデータから選択しセルに入るようにしたいのですが どなたか 教えていただけないでしょうか? よろしくお願い致します

  • エクセルにてボタン一つで複数のマクロを実行する

    すみません。エクセル初心者なのですが、仕事で作らなければいけなくなったのでご教授いただけたらと思います。 エクセルのシート内にボタンオブジェクトを作成し、そのボタンを押すだけで 1.指定したシートのみを別ブックとして書き出す(この場合はボタンのあるシート)。 その際に指定セル内の名前(例えばA1セルに記入された内容)でファイル名を付与して、指定場所に保存する。 2.上記シートには別ブックとして保存した場合はいらない部分(上記ボタンオブジェクトなど)があるので、その部分は削除して保存したいです。必要な内容は(印刷する場合であれば)1ページ目と2ページ目です。ボタンオブジェクトは3ページ目になるよう配置してあります。必要な情報かどうかはわかりませんが一応記入しておきます。 3.シート内のセル(ここではA1セル)に書かれた内容を1.で作成された物とは別ブックに書き出し、一覧表を作成する。こちらはデータベースの用な物として使用したいので、順次追加されて行くようにしたいです。例えば上記シートが作成された日付とその内容(ここではA1セル)で追加されてゆく感じで。 4. 3.で作成したブックに順次1.の指定シートを追加(コピー)する。 一応4.の順次シートのコピーを追加すると言うのは何となく出来たのですが、同じファイル名になってしまうとその時点で動作が止まってしまいました。参考書には「同じ名前なら自動でファイル名(1)となる」と「(1)」が付与されるとあったのですが、上手く作成してくれず止まってしまいました。 職場からデータを持ち出せないので、作成した内容を記載する事が出来なくてすみません。 よろしくお願いいたします。

  • エクセル、コマンドボタンについて

    素人な質問ですみません。 シート1にコマンドボタンを作成しています。 このコマンドボタンを押すと、シート2のA1セルからE10セルに入力してある50の文字列から、ランダムにコマンドボタンのあるシート1のA1セルに表示させるようにしたいのですが。 このようなことは出きるでしょうか? VBAの知識もほとんどなく困ってます。 簡単に言うと、コマンドボタンを使って、別シートに入力してある文字列を表示させる方法ということになるでしょうか。 よろしくお願いします。

  • エクセルのマクロで他のファイルを開く方法

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=109111 で書かれているのとほぼ同じ内容なのですが、 ○.xlsは顧客DBで×.xlsはその顧客の詳細情報となっていて、×.xls名=顧客番号.xlsとなっています。 アナログな方法として、DBで検索して、顧客番号を確認して、検索して開く。という方法も取れるのですが、その顧客DB(○.xls)である特定の顧客番号を選択すると、(参照セルを作ってそこに手打ちしてもいいのですが)その顧客のファイルが自動で開く(sheet1のA1がアクティブになる)ような方法があったら教えて下さい。 (参照ページの方は”ボタンを押すと”というコマンドになっているので・・・) マクロ&VBAは素人並です。 助けてくださいよろしくお願いします。

  • エクセルの検索マクロ

    以下のようなマクロを作成しようとしているのですが、なかなかうまくいきません。 どなたかご教授お願いいたします。 ・セル(A,2)に入力されている文字を検索ボタンを押すことで検索する  ※検索ボタンはコマンドボタン ・検索対象は、Book内の全シート ・検索後は、見つかったセルに移動 ・見つからなかった場合は、”ありません”を表示

  • エクセル マクロで別のブックに貼り付けたい!

    作成したシートを別のブック(既存)にマクロを使って貼り付けたい のですが、いろいろ調べた結果以下のようにはすることができました。 ---------------------------------------------------------------- Sub SaveSheet() Dim sFileName As String 'ファイル名の設定 sFileName = "C:\a\test.xls" 'シートをコピーして新規ブックを作成 Sheets(Array("Sheet1", "Sheet2")).Copy '作成したブックの保存 ActiveWorkbook.SaveAs sFileName End Sub ---------------------------------------------------------------- これはとあるサイトで見つけたもので、私自身が作成したものでは ありません。 このマクロの問題は、 ○あらたにブック(シート)が作成されること (マクロ実行時は上書きになるので、変更できなくても使えないわけ ではない) ○元データはシート丸ごとであり、セル範囲を選択できない。 ○貼り付けるシートにおいても、任意の場所を起点とできない。 ということです。 整理しますと、『作成したシートの任意のセル範囲を、別に存在する ブックに、任意のセルを起点として貼り付けたい』 ということです。 どうかよろしくお願いします。m(_ _)m

  • EXCEL ユーザーフォームを使ったマクロ

    データの登録をするのにユーザーフォームを使おうと思うのですが、なかなかうまくいきません。教えてください。 ユーザーフォームにはコンボボックス、テキストボックス、コマンドボタンが貼り付けてあります。(コンボボックスのリストには呼び出したいシートの名前が入っています) コンボボックスのリストの中から呼び出したいシートを選択し、テキストボックスに入力した内容を、コマンドボタンを押すことで選択されたシート上の、あるセルに登録したいのですがどうすればよいでしょうか?

専門家に質問してみよう