• ベストアンサー

Excel 2003 ワークシートを検索するには?

初歩的な質問かな?と思いますが、よろしくお願いします。 シート見出しに勘定科目名を付けたワークシートが複数枚あり、 他に全勘定科目が一覧で見れるシートがあります。 1つ1つリンク貼り付けするのが面倒なので、標準の関数で処理できないか 考えてみましたが、分かりませんでした。 ユーザー定義関数だと、こんな↓感じ(まだ中途半端です)なのですが Public Function Kingaku(Kamoku As String) Kingaku = Sheets(Kamoku).Cells(5, 1).Value End Function これを Excel に標準で組み込まれた関数で処理するためには どのように記述すれば良いですか? ※ユーザー定義関数を使いたくない理由は、マクロをメンテナンス出来る  人が関係者の中にいないからです。

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

  • ベストアンサー
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.3

財務会計の処理で調書見たいなものが科目別のシートに入っている。 それらのシートにはその科目の決算額がCells(5, 1)に入っている。 これらの集約した表(決算書みたいなもの)を作ろうとしている。 と解釈しました あなたの書いたユーザー定義関数そのままをExcel組み込みの関数で表現すると RC[-1} 関数の行の左の列に科目名(コード?)が入っているとすると =INDIRECT(RC[-1]&"!"&"R5C1",FALSE) こういうことでいいでしょうか

GreatDragon
質問者

お礼

ご回答ありがとうございます。 お陰様で、期待通りの数式が出来ました。 RC 参照って行・列の指定がしやすそうですね。

その他の回答 (2)

回答No.2

>1つ1つリンク貼り付けするのが面倒なので、標準の関数で処理できないか 考えてみましたが、分かりませんでした 勘定科目一覧のシートと他のシートのセルの関係を示さなければ、回答はできません。もしその関係に規則性がなければ、ユーザー定義関数もつくれません。

GreatDragon
質問者

お礼

分かりにくい質問で申し訳ありません。 以降、気をつけます。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

>Public Function Kingaku(Kamoku As String) >Kingaku = Sheets(Kamoku).Cells(5, 1).Value >End Function これを関数でやるなら セルA1にシート名を入力 =INDIRECT(A1&"!a5") これでよいかな?

GreatDragon
質問者

お礼

ご回答ありがとうございます。 INDIRECT 関数って便利ですね。 お陰様で、ISERROR 関数と IF 関数を追加して期待通りの数式が出来ました。

関連するQ&A

  • Excel VBAの Functionをワークシートから使用できないようにしたいのですが...

    Excel VBAについて質問です。 functionプロシージャを使っている時,一般のマクロからは呼び出せるが,ワークシート関数として使いたくないものがあります。 すなわち,「関数の挿入」ダイアログの「ユーザー定義」のところに不必要な(ワークシート関数として使う意図のないもの)を表示させたくないのですが,そのようなことは可能でしょうか。 今,できるだけsubプロシージャの形にするようにしたりしているのですが,うまい方法があればFunctionも使いたいと思っています。 良い方法があれば教えてください。

  • ワークシートをコピーしたい

    下記載のサンプルマクロは「ワークシートをコピーして、追加したワークブックにコピペする」マクロなんですが、これを「ワークシートをコピーして、追加したワークシートにコピペする」にできないでしょうか? 出来るのであれば、値と書式の他に関数もそのまま貼り付けたいので御教授お願いします。 ただマクロは削除してマクロ抜きのコピペが理想です。 宜しくお願い致します。 Sub サンプル() Dim sc As Integer sc = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー Workbooks.Add 'ブック追加 Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け Sheets("Sheet1").Name = "コピー" Application.CutCopyMode = False Application.SheetsInNewWorkbook = sc ActiveWorkbook.Close ThisWorkbook.Activate End Sub

  • エクセルのシートのコピーについて

    シートのコピーをVBAで行いたいのですが、エラーになってしまいます。 間違っている箇所が分からないのでご教授お願いします。 貼り付けというブックにマクロが組まれています。 ”データ”のブックにあるシート名が”貼り付けのブックのリスト”のシートに記載されています。 リストのシートに記載されているシートを貼り付けのブックにコピーしたいです。 よろしくお願いします。 Sub シートコピー() 行数 = 2 Do Until IsEmpty(Cells(行数, 3).Value) コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) Workbooks("データ.xls").Worksheet(コピー元).Copy After:=Workbooks("貼り付け.xls").Sheets(Workbooks("貼り付け.xls").Sheets.Count) 行数 = 行数 + 1 Loop End Sub

  • エクセル マクロ Matchの使い方

    前回の質問で、大変親切に回答して頂き、大変感謝しております。 でも、私自身がこの質問サイトのルールを把握していなっかたので、まだ問題が解決していないのに、親切に回答してくださった方を、ベストアンサーに選んでしまいました。 でも、まだ問題が解決していないので、再度質問をさせて頂きます。 私のやりたい事は下記のような事です。 現金出納帳シートのA列(大科目)B列(小科目)の文字列の中の 大科目(たとえば会費・入会金)小科目(たとえば会費) この二つの文字が、決算シートのA列(大科目)の範囲のB列(小科目)の同じ文字と一致したときに 現金出納帳シートのB列(小科目)の一致した文字の行の4列目の数値を決算シートのB列(小科目)の同じ文字の行の右隣のセルに、出納帳に入力した数値を入れたいのです。 前回の回答を参考に、下記のようなマクロを試してみたのですがどうしてもうまくいくません。 Dim s Dim h As Variant Private Sub Worksheet_SelectionChange(ByVal Target As Range) h = Sheets("決算").Range("B3:B103").Value For Each ws In Worksheets s = ws.Index Next ws For K = 5 To s Step 1 Set KaMoku = Sheets(K).Range("D3:J103").Columns(1) Next K If IsError(Application.Match(h, KaMoku, 0)) = False Then この用にするとここでエラーになります。 MyRNo = Application.WorksheetFunction.Match(h, KaMoku, 0) 実行時エラー方が一致しません MyUNo = KaMoku.Cells(MyRNo).Offset(, 4) N = N + MyUNo Sheets("決算").Cells(3, 5).Value = N End If End Sub もう一例 Dim s Dim h As Variant Private Sub Worksheet_SelectionChange(ByVal Target As Range) h = Sheets("決算").Range("B3:B103").Value For Each ws In Worksheets s = ws.Index Next ws For K = 5 To s Step 1 Set KaMoku = Sheets(K).Range("D3:J103").Columns(1) Next K If IsError(Application.Match(h, KaMoku, 0)) = False Then では、.WorksheetFunctionがいけないのかと思って、この用にすると、アプリケーション定義と出ます。 MyRNo = Application.Match(h, KaMoku, 0) MyUNo = KaMoku.Cells(MyRNo).Offset(, 4)  実行時エラー アプリケーション定義またはオブジェクトの定義エラー N = N + MyUNo Sheets("決算").Cells(3, 5).Value = N End If End Sub 素人の私には皆目見当がつきません、どうすれば良いのですか。 教えてください、どうかよろしくお願いします。

  • エクセルのユーザー定義関数で(VBA)

    エクセルのVBAで、セルに「=SheetName」と書き込めば、その関数を書き込んだセルが属するシート名をセルに代入さるようなユーザー定義関数を作りたいと考えています。 で、標準モジュールに Public Function SheetName(test) SheetName = ????? End Function と、書き込んでふと止まりました。 ユーザー定義関数を書き込んだシートの名前ってどうやって取得すればいいのでしょうか?VBでいうSenderみたいなのってあるんでしょうか? どなたか?詳しい方教えて頂けないでしょうか? 宜しくお願いいたします。

  • EXCELのVBAで、あるワークシートでのみ使うユーザーフォームを作り

    EXCELのVBAで、あるワークシートでのみ使うユーザーフォームを作りました。そのワークシート上での定数や、プロシージャや関数をワークシートのモジュールに置いています。そして、その定数や関数などをユーザーフォームのイニシャライズなどで使いたいと思いますが、ユーザーフォームのモジュールはワークシートのモジュールとは別なので、使えません。他への影響を考えると、標準モジュールには、置くのは不適切だと思います。 特定のワークシート上でのみ使うユーザーフォームと、そのワークシートとで、共通の定数や関数などを使う方法は、あるのでしょうか。どのようにすればよいのでしょうか。

  • アクティブでない複数のシートのセルのコンテンツを一度でクリアしたい

    エクセルVBAで、アクティブでない複数のシートの所定のセルのコンテンツを一度でクリアしたいのですが、 現在アクティブではないシートをアクティブにしないでclearcontentsするとアプリ定義、オブジェクト定義エラーになってしまいます。 それぞれのシートをアクティブにしないとclearcontentsできないのでしょうか? どなたか教えてください。よろしくお願いします。 ------------------------------------------------------------------------------- Sub CLEAR_CONTENTS() Sheets(\"1\").Range(Cells(6, 3), Cells(6, 8)).ClearContents Sheets(\"2\").Range(Cells(6, 3), Cells(6, 8)).ClearContents Sheets(\"3\").Range(Cells(6, 3), Cells(6, 7)).ClearContents End Sub

  • エクセルで、シートを非表示のままマクロを実行するには?

    エクセル初心者です。 Sheet1で、マクロの実行ボタンがあり、Sheet2で、データを編集して、 Sheet1に結果の一覧を表示させるマクロなのですが、 Sheet2は非表示のままマクロを実行したいのですが、うまくいかず、 Sheet2を表示して、実行するとうまくいくため、 一時的にシートを表示させるようにしてみたのですが、 Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Insert Shift:=xlDown で、アプリケーション定義・オブジェクト定義エラーになります。 どなたかご指南下さい。 Private Sub EDITSLINF() Dim rowCnt As Long Application.ScreenUpdating = False Worksheets("製造記録一覧 (edit1)").Visible = True  Sheets("Sheet2").Range("AB2:AK300").ClearContents '追加レコード抽出&コピー&ペースト Sheets("Sheet2").Range("Q1:Z300").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "AP1:AP2"), CopyToRange:=Sheets("Sheet2").Range("AB1:AK1"), Unique:=False '既存レコードコピー&ペースト rowCnt = Sheets("Sheet2").Range("O1") Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Insert Shift:=xlDown Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Interior.ColorIndex = xlNone Sheets("Sheet2").Range(Cells(2, 2), Cells(rowCnt, 11)).Copy Sheets("Sheet2").Range("AB2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Worksheets("Sheet2").Visible = False 'メインシートへコピー   Application.CutCopyMode = False Sheets("Sheet2").Range("AB2:AJ300").Copy Sheets("Sheet1").Range("K4").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False End Sub

  • Excel VBA 指定シートの取込

    こんにちは。 ExcelのVBAを使用して、異なるBookのシートを取込みたいのですが、 シートが無かった場合の処理方法がわかりません。 現在のコードは下記の様になっております。 With Workbooks.Open"BOOK1.xls" .Worksheets("Sh1").Cells.Copy ThisWorkbook.Sheets("Sheet1").Range("A1") .Worksheets("Sh2").Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") .Worksheets("Sh3").Cells.Copy ThisWorkbook.Sheets("Sheet3").Range("A1") .Close End With Book1に指定したシートが無い場合、何もしないようにしたいのですが、 どの様に書き換えれば宜しいでしょうか? よろしくお願いします。

  • Excel : 関数内からセルを更新したい

    実行環境は Excel 2000 です。 新規ブックに、 標準モジュールを追加し、 Function Test()   Cells(2, 2) = "OK"   Test = 2 End Function という関数を追加します。 Sheet1 の、 セル「A1」に「10」を入れます。 セル「A2」に「=Test() + A1」 セル「A1」を変更すると、 関数「Test()」が呼び出されます。 このとき、コードのように、B2 のセルに「OK」を 表示させたいのですが、 「アプリケーション定義またはオブジェクト定義のエラーです。(1004)」 のエラーが発生してできません。 マクロやボタンなどのイベントプロシージャでは可能なのですが、上記のようにセルに組み込んだ関数が、 更新により実行された場合はできないのでしょうか? (Cells の指定を Workbooks(1).Worksheets(1).Cells(2, 2) としてもダメでした) (「書式」→「セル」→「保護」→「ロック」はチェックされていません) すみませんが、よろしくお願い致します。

専門家に質問してみよう