2016-04-02 14 views
0

私はかなり新しいVBAユーザーです。セル値に応じてVBAで複数のシートをナビゲートする

私は何かをコーディングしたいと思いますし、フォーラムのヒント/ヒントを見つける方法が見つからないので、あなたの親切な助けを求めるようになります。

私は、タイトルを持つスプレッドシートをたくさん持っていて、それらの人の経費を表しています。私の目標は、スプレッドシートを再編成したファイルを作成し、「ホーム」スプレッドシートで費用参照を抽出することです。関連するエクスポージャーは、同じ行に「Y」と表示されます。

「ホーム」スプレッドシートには、最初のページに人の名前があります。 "ポール"、 "マリー"、 "ピエール"など....同じ列に。

スプレッドシート「ホーム」の名前を見て、「名前付き」スプレッドシートのデータを「ホーム」にコピーできるコードを作成したいと考えています。

フォーマットは「名前付きスプレッドシート」と同じになりますので、常に同じ列を見ています。

私は問題に対処することができどのようにわからない、これまで

Sub Expenses() 

    Set wk=ThisWorkbok.sheets("Home") 

    Dim Name as String 
    Dim Expense as Integer 
    line_newexpense = 9 
    rowline = 10 
    start_l =34 

    Do While Name <> "#" 
     Line = wk.Cells(start_l,3) 
     Name = ThisWorkbook.Sheets("Home").Cells(line_newexpense,39).Value 
     Expense = ThisWorkbook.Sheets(Name).Cells(rowline,3).Value 

     For j=50 to 8 
      If ThisWorkbook.Sheets(Name).Cells(25,j).Value="Y" Then 
       Line = ThisWorkbook.Sheets(Name).Cells(3,j).Value 
      End If 
      rowline = rowline+1 
     Next j 

     line_newexpense = line_newexpense + 1 
    Loop 

私は「範囲外のエラー9下付きの」遭遇、それを実行しようとすると問題がある次のことを試してみました、

事前にあなたのヒントに感謝します!

親切に敬意を表します。

+0

こんにちは。あなたのコードを読みやすくするためにあなたの質問を編集しました。よくインデントされたコードは、一般的に、より質の高い回答を集めます。がんばろう! –

+0

Hey Carolinaさんは 'Set wk = ThisWorkbok.sheets(" Home ")'ブックのスペルが間違っています。つまり、wkが設定されていないので 'Line = wk.Cells(start_l、3)'にアクセスできません。そして、jを50から8に反復しようとすると、 'j = 50から8 step-1'のようにjがj - 1になるように指定する必要がありますが、このjを後ろにして行線が進む。 –

+0

「ホーム」と「名前」シートのスクリーンショットを追加してください – user3598756

答えて

0

これにはVBAは必要ありません。 INDIRECT関数を使用して、目的を達成することができます。 B1は、ワークシート、セイ「ポール」の名前を持ち、A1はあなたが必要とするデータを有する細胞である例えば

=INDIRECT(B1&"!$A$1") 

enter image description here

またIF機能を使用して、上記の式でY部分を考慮することができます。

+0

コメントと助けをありがとう! 変更を実装しようとしましたが、最初のページの抽出が1行になるようにしたいと考えていますが、その間接が最良の選択肢であるかどうかはわかりません。私はそれが柔軟性とフォーマットを可能にするためにVBAを使いたいと思っていましたが、間接的に私にトリックを覚えてもらえたら(例えば、3行の経費がありますが、#1と#3を "Home"他の下に、どうすればいいですか?ありがとう! – Carolina