エクセルのVBAで下二桁を認識し、別ワークシートに値を引用する方法

このQ&Aのポイント
  • エクセルのVBAを使用して、下二桁を認識し、その値を列数として別ワークシートに値を引用する方法について教えてください。
  • エクセルのVBAを使って、下二桁を認識する方法を知りたいです。下二桁の値を列数として別ワークシートに値を引用するためのコードを教えてください。
  • エクセルのVBAで、下二桁を認識する方法について教えてください。下二桁を列数として別ワークシートに値を引用するためのVBAコードを教えてください。
回答を見る
  • ベストアンサー

エクセルのVBAでプログラムを作成中です。

エクセルのVBAでプログラムを作成中です。 下二桁が1の項目のある列があれば、その列を別ワークシートの1番目の列に引用、 下二桁が2の項目のある列があれば、その列を別ワークシートの2番目の列に引用。。というように、 別ワークシートへ引用することができればな、と思います。 ポイントは、 下二桁を認識し、その値を列数と認識するにはどうすればよいか? ex) 101023がA1セルにあり。⇒ 下二桁が23なので、別ワークシートでは23列目。 application.worksheetfunction value vlookup 。。色々コードは思いつくのですが、そもそも見当違いなのかもしれません。 ご教示ください。

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

  • ベストアンサー
  • rukuku
  • ベストアンサー率42% (401/933)
回答No.1

こんばんは シート1のA1に数字を入れて以下のプログラムを実行してみてください。 Sub コピー() Dim TargetRow As Long Worksheets(1).Select TargetRow = Right(Cells(1, "A"), 2) Cells(1, "A").Copy Worksheets(2).Cells(TargetRow, "A") End Sub >下二桁を認識し Right関数を使います。 右から指定した字数分だけ取り出す関数です。 >その値を列数と認識する セルの指定の仕方に Cells(行番号,列番号) という方法があります。 特定のセルを指定するならば Range("A23") のような指定の仕方が出来ますが、 場合によって指定するセルを変えたいときには Cells が便利です。

mame1218
質問者

お礼

ありがとうございました。 大変助かりました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

質問が不明確。補足要求。 なぜ2桁と言ってながら 下二桁が1の項目などの例を出すのか。紛らわしい ーー A1には日付的な数字が入っているのか。日付(ヒヅケシリアル地)で無いでしょうね。それなら やり方が変わる。 それで日ごとに、列をわけて、別シートにデータを整理したいのか(推測) データ量(2つめ)以降は同なのか、あるのか。 そういうことを書いてくれれば判りやすいが、どうですか。 もとのワ-クシートのデータの行・列の有様を質問例として挙げて質問するものだ。 引用と言う言葉もこのような意味では使わない。参照、コピー 持ってくる からデータをセットする などかな。検索して値を採ってくるのを、引用と言う表現している質問例は在る。 ーー application.worksheetfunction value vlookup などの使用は本質ではない。まとはずれ。 ーー そんなことを書くより (1)データ例 (2)目的 完成形の例 (3)簡単な説明(1)と(2)のつながり。個の県では、文字列末尾2桁が列を決める。

mame1218
質問者

お礼

いつもありがとうございます。 質問自体がいまひとつでした。 的確に質問のできるよう、気をつけます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

数字は、あくまでも計算で取り出します。 どういうことをしようとしているのか分かりませんから、こちらの想像の範囲でマクロにしました。 '// Sub Test1()  Dim col As Long  Dim c As Variant  With Worksheets("Sheet1")   Application.ScreenUpdating = False   For Each c In .Range("A1", .Cells(Rows.Count, 1).End(xlUp))    col = c.Value - Int(c.Value / 100) * 100 '2桁を取り出す    If col > 0 Then     With Worksheets("Sheet2").Cells(Rows.Count, col).End(xlUp)      If .Value = "" Then        .Value = col '1行目に書き込む      Else        .Offset(1).Value = col '2行目以降に書き込む      End If     End With    End If   Next   Application.ScreenUpdating = True  End With End Sub

mame1218
質問者

お礼

回答頂き、ありがとうございました。 期待している回答でした。

関連するQ&A

  • エクセルVBAで作成できますか。

    1分毎のデータが1時間分、項目別にあります。10分毎に各項目の合計を求めたい(Sheet2に合計を表示希望)のですが、どのように作成したらよいのか困っています。行数、列数はかなり増えるためVBAで作成したいです。どなたか教示よろしくお願いします。

  • ExcelのVlookup関数の制限について

    ExcelのVlookup関数についての質問です。 Vlookup関数の引数に「範囲」(参照する別表のこと)ですが、列数に制限がありますでしょうか?100列までならOKとか、ワークシートの列数が許す限り大丈夫、などの情報はありますでしょうか? 環境はWindows版のExcelで、versionは2000、2002、2003、いろいろです。 よろしくお願いします。

  • EXCEL VBA VloopUPエラー

    お世話になります。 EXCEL VBAでVlookupを動かそうとしていますが、エラーが出てうまく動きません。 以下やりたいことと、エラーメッセジとなります。 【やりたいこと】 「生販在庫推移表」シートにある日付(Cells(1,j).Value)をキーにして、別シートの「日別商品別集計」(このシートの1列目は日付になっています)のある列(sno)の値を「生販在庫推移表」シートのあるセル(Cells(i,j).Value)に持ってきたいのです。 【エラーになっているロジック】 Worksheets("生販在庫推移表").Cells(i, j).Value = Application.WorksheetFunction.VLookup(Worksheets("生販在庫推移表").Cells(1, j).Value, Worksheets("日別商品別集計").Range("A1:BZ5000"), sno, False) 【エラーメッセージ】 実行時エラー'1004' WorksheetFunction クラスのVLookupプロパテイを取得できません。 どなたか良きアドバイスをご教授いただけますでしょうか。 よろしくお願い致します。

  • excelのvlookup関数で勝手に引用符がつく

    excelのvlookup関数を使ってあるシートを作っています。 「basedata」というシートに3列表をつくり、1番左にキー、2番目と3番目に値をいれ、この表を別シートから検索にいっています。 検索元のシートには 文字列 文字列からMID関数で切り出した数値 検索1 検索2 の4列があります。 やりたいことは2列目の切り出した数値を元にして、basedataのキーを検索しにいき、検索1の列にbasedataの2列目の値を、検索2に3列目の値をいれたいと思っています。 =IF(ISERROR(VLOOKUP(B2,basedata!A2:E56324,2,0))=TRUE,"",VLOOKUP(B2,basedata!A2:E56324,2,0)) という式を検索1のセルに入力した場合、何も表示されず、B2に実際に入っている値を引用符なしで直うちすると値が表示されます。ステップインで分析すると、参照にした場合、参照値が引用符で囲われており、これが原因かと思うのですが、何か回避方法はないでしょうか。

  • ExcelVBA:WorksheetFunctionのいろんな記述とエラー

    Excel2000でVlookup関数を記述してるんですが、WorksheetFunctionで以下のエラーメッセージが出てきます。 「エラー:1004 ApplicationクラスのVlookupプロパティーが取得できません」 (試してみた記述例) ○myVar = Application.WorksheetFunction.Vlookup(検索値, 範囲, 列位置, 検索の型) ○myVar = WorksheetFunction.Vlookup(検索値, 範囲, 列位置, 検索の型) 仕方ないので、97記述をすると問題なく出来ます。 (97記述例) ○myVar = Application.Vlookup(検索値, 範囲, 列位置, 検索の型) 今は97記述でしのげてます。 でも、たしかExcel2000からは、ワークシート関数はWorksheetFunctionを利用することになったんじゃないんでしょうか。 この記述がいつまで通用するのか分からないので、ちょっと不安です。

  • Excelの関数

    まず、Excelの関数ボタンを押すと毎回強制終了させられるのですが、直せますか? それから、質問です。 たとえば、sheet2のC列の(魚屋さん)D列(500円)をsheet1のA1(魚屋さん)と入っている行のC1にsheet2のD列の500円を入れるようにしたかったので、VLOOKUPを使って入れるようにしたのですが、コピーをして、別のセルに他の項目(八百屋さんとか)の時も同じようにしようと思ったら、sheet2に同じ項目がないのに魚屋さんの金額が出てしまいます。 項目がないときにsheet1のC1に何も記入されずにする方法を教えてください。 私はsheet1のC1に if(A1=””,””,VLOOKUP(A1,'sheet2'!A1:E10,4))にしました。他にあれば教えてください。 よろしくお願いします。

  • ExcelでVLOOKUPの引数にMID関数を使う?

    ・Sheet1のA1セルの数値をVLOOKUPの検索値にする ・Sheet1のA1セルの数値が6桁あって、左から2・3・4番目の数値を使う ・Sheet2にVLOOKUPの「範囲」になる表がある 以上の条件のとき =VLOOKUP(MID(A1,2,3),Sheet2!$表のセル範囲$,列,型) という数式を作ったのですが、「NAME#」エラーがでました。 正しい数式を教えていただければ助かります。 よろしくお願いします。

  • エクセルのVBAについて

    エクセルのVBAに詳しい方がいらっしゃれば、助けて頂きたい事がございます! ・Sheet1(以下S1と記載)の、1列目に、A1セルより、項目として、「ID、地区、住所、電話番号、資産名、耐用年数、取得日」が記載(=S1は項目のみ) ・Sheet2(以下S2と記載)の、1列目に、A1セルより、項目(住所、設備、資産名、区域、備考)と2列目以降にそのデータが記載 【やりたいこと】 S1の項目と完全一致するS2の項目(上記では、住所、資産名のみ)の2列目以降のデータを、S1の2列目以降に張り付ける作業を自動化するコードを書きたいのですが、上手くいかず・・・ どなたかコードを記載して頂けないでしょうか?また下記の前提を考慮したコードであると、なお助かります! 【前提】 ・「S1の項目が空欄にぶつかったら、検索を終了」という事をループに入れる(S1の項目数は変動するため) ・「S2の2列目以降の全てのデータをS1に張り付ける」という事をコードに入れる(S2の2列目以降のデータの列数も変動する且つ途中に空欄も含むため) ・S1の「地区」に、S2の「区域」を反映できるようなコードを入れる 宜しくお願いいたします_(._.)_

  • 【VBA】別シートを検索して該当があれば『●』表示

    VBA初心者(独学中…)です。 別シートからVLOOKUPの要領でデータの抜き出しをしたいです。 関数を試しましたが、データ量が多く、かなり時間が掛かってしまうため、 できればマクロで完了させたいと思っています。 ご教示のほど、何卒よろしくお願いいたします。 ------------------------  帳票の仕様 ------------------------ ■Excel2010 にて  ・Sheet1~9のJ列に『検索コード』があります。  ・Sheet10は【コードマスタ】シートです。  ・行はシートにより増減あり。  ・列はSheet1~9で共通、項目・並び等 変更なし。     Sheet10も項目・並びは変更しません。 ------------------------  やりたいこと ------------------------ Sheet10からSheet1~9へ、VLOOKUPのように該当データを抽出・転記したい。 ------------------------  具体的には… ------------------------ Sheet1~9の『検索コード(J列 ※データは[セル:J2]以下~)』を元に、  (1)Sheet10のA列を検索 ⇒ 該当があればSheet1~9のK列へ  (2)Sheet10のB列を検索 ⇒ 該当があればSheet1~9のL列へ 『●』が表示されるようにしたい。 ------------------------------------------------------------------------ 試しに(1)の動作テスト用に、以下を書いてみましたがうまく動作しませんでした。 (★の部分がエラーになります) 正しく動作させるには、どのようにしたらよろしいでしょうか。 (実際のコードを教えていただけますと、大変有難いです…) ================================================================ Sub コードマスタからK列値をVLookup() Dim tbl As Range Set tbl = Worksheets(10).Range("A:B") Dim key As Long key = Range("J2").Value        ★ On Error Resume Next Dim ret As String ret = WorksheetFunction.VLookup(key, tbl, 1, False) On Error GoTo 0 Range("K:K").Value = ret End Sub ================================================================

  • エクセルマクロ超初心者で、悩んでます。

    エクセルマクロ超初心者で、悩んでます。 どなたか助けてください。 悩みはこうです↓ データ用のワークシートのセルに数字、文字が入力してあります。 セルの数値同士の引き算で算出した数値を列数として、別の印刷用のワークシートのセル番地(列、行)に、「文字」を表示したいのです。 日本語で書いちゃうと ワークシート「印刷用」の、あるセル番地(ワークシート「データ用」から、列数はJ1‐A1、行数はのB1の数値)に ワークシート「データ表」のC1の文字 を出力せよ です。 Worksheets選択がうまくいきません CellsかRangeを使うのかと思いますが、引き算する表現がわかりません・・ 文例があれば、稚拙ながら活用できるかなと思います。 よろしくお願いします!

専門家に質問してみよう