• 締切済み

エクセル、セルの範囲内検索

例えば A1~C50までの範囲内で、 ランダムで1セル選択し、別のエクセルファイルの A100に貼り付け。と言う事は可能なのでしょうか?

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

空ならやり直すようにすれば、良いかと。ただし、範囲内が全て空だと無限 ループの恐怖が(--;) Sub Sample()   Dim lngRow As Long, lngCol As Long   Dim lngMaxRow As Long, lngMinRow As Long   Dim lngMaxCol As Long, lngMinCol As Long   Dim tmp As Variant   Dim SH As Worksheet   '最少行番号   lngMinRow = 1   '最大行番号   lngMaxRow = 50   '最少列番号   lngMinCol = 1 '1=A列   '最大列番号   lngMaxCol = 3 '3=C列   '転記元のシートをオブジェクト変数に   Set SH = Workbooks("2.xls").Sheets("Sheet1") GetRandNum:   '乱数初期化   Randomize   '乱数で取得する行番号を決める   lngRow = Int((lngMaxRow - lngMinRow + 1) * Rnd + lngMinRow)   '乱数で取得する列番号を決める   lngCol = Int((lngMaxCol - lngMinCol + 1) * Rnd + lngMinCol)   '値が空でないかをチェック   tmp = SH.Cells(lngRow, lngCol).Value   If IsEmpty(tmp) Then     '空ならやり直し     GoTo GetRandNum   Else     '転記     Workbooks("1.xls").Sheets("Sheet1") _       .Range("A100").Value = tmp   End If   Set SH = Nothing End Sub

ReikiII
質問者

お礼

無事に目的とした表が完成致しました! ありがとうございましたー!

全文を見る
すると、全ての回答が全文表示されます。
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

本当に、、申し訳ないです。#1 のコードはよく見たら、バグだらけでした。 任意の範囲で整数の乱数を発生させるには、 Int((最大値 - 最小値 + 1) * Rnd + 最小値) となります。#1 のコードは全然違いますね。うろ覚えの頭の中で書いたもの ですから、お粗末なものをアップしてご迷惑をお掛けしました。 > Workbooks("1.xls").Sheets("Sheet1").Range("A100").Value = _ >     Workbooks("2.xls").Sheets("Sheet1").Cells(lngRow, lngCol).Value 元ブックは 2.xls で転記先ブックが 1.xls 、かつシート名が正しければ、コード の記述としては、正しいはずです。 > エラーが出ちゃいます。 恐らく、#1のコードは乱数発生の部分がまずかったので、0 などの数値が返り、 エラーになったのだと思います。例えば、Cells(0,3) などはエラーになります。 重ねて、すみません。 一応バグフィックスしたものを再アップさせて下さい。 Sub Sample()   Dim lngRow As Long   Dim lngCol As Long   Dim lngMaxRow As Long, lngMinRow As Long   Dim lngMaxCol As Long, lngMinCol As Long      '最少行番号   lngMinRow = 1   '最大行番号   lngMaxRow = 50   '最少列番号   lngMinCol = 1 '1=A列   '最大列番号   lngMaxCol = 3 '3=C列     '乱数初期化   Randomize   '乱数で取得する行番号を決める   lngRow = Int((lngMaxRow - lngMinRow + 1) * Rnd + lngMinRow)   '乱数で取得する列番号を決める   lngCol = Int((lngMaxCol - lngMinCol + 1) * Rnd + lngMinCol)   '転記。両方のブックが開いてる必要があります   Workbooks("1.xls").Sheets("Sheet1").Range("A100").Value = _     Workbooks("2.xls").Sheets("Sheet1").Cells(lngRow, lngCol).Value End Sub

ReikiII
質問者

お礼

大変ありがとうございます。 バッチリできました^^ありがとうございます。 追加で聞きたいことあるのですが、 範囲内の中に空白がある場合、 空白を除く検索は可能でしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

以下の方法は如何でしょうか。 =OFFSET([book.xls]Sheet1!$A$1,RANDBETWEEN(0,9),RANDBETWEEN(0,2)) (注)両エクセルファイルが開いていないとエラーになります。

全文を見る
すると、全ての回答が全文表示されます。
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

#1 です。すみません、コードを3ヵ所訂正させて下さい。 【訂正前】 Dim lngMaxRow As Long, lngMixRow As Long                 ^^^^^^^^^ Dim lngMaxCol As Long, lngMixCol As Long                ^^^^^^^^^ '乱数で取得する列番号を決める lngRow = Int((lngMaxCol - lngMincol + 1) * Rnd + lngMaxCol)   ^^^ 【訂正後】 Dim lngMaxRow As Long, lngMinRow As Long Dim lngMaxCol As Long, lngMinCol As Long '乱数で取得する列番号を決める lngCol = Int((lngMaxCol - lngMinCol + 1) * Rnd + lngMaxCol) Excel で動作するか検証してませんので、、すみません。

全文を見る
すると、全ての回答が全文表示されます。
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。KenKen_SP です。 > ランダムで1セル選択し、別のエクセルファイルのA100に貼り付け... ご質問タイトルとは全く別件ではないかと。。(^^;) Sub Sample()   Dim lngRow As Long   Dim lngCol As Long   Dim lngMaxRow As Long, lngMixRow As Long   Dim lngMaxCol As Long, lngMixCol As Long        '最少行番号   lngMinRow = 1   '最大行番号   lngMaxRow = 50   '最少列番号   lngMincol = 1 '1=A列   '最大列番号   lngMaxCol = 3 '3=C列      '乱数初期化   Rndomize   '乱数で取得する行番号を決める   lngRow = Int((lngMaxRow - lngMinRow + 1) * Rnd + lngMaxRow)   '乱数で取得する列番号を決める   lngRow = Int((lngMaxCol - lngMincol + 1) * Rnd + lngMaxCol)      '転記。両方のブックが開いてる必要があります   Workbooks("転記先ブック名").Sheets("転記先シート名").Range("A100").Value = _     Workbooks("元ブック名").Sheets("元シート名").Cells(lngRow, lngCol).Value End Sub

ReikiII
質問者

お礼

乱数初期化のaがぬけてて定義エラーがでてました^^; なんとかコンパイルして実行したのですが、 転記のところで両方のブックがひらいているのに、 エラーが出ちゃいます。転記先ブックやシート 元ブック(実行ブック)と元シートの書き方が間違えているのでしょうか?   Workbooks("1.xls").Sheets("Sheet1").Range("A100").Value = _     Workbooks("2.xls").Sheets("Sheet1").Cells(lngRow, lngCol).Value でよろしいのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXCELで、セル間隔をあけて貼り付けしたい。

    2つのEXCELファイルがあります。 ファイルAのデータが以下のようにありまして、    A  B  C  D  E --------------------------------- 1| 5  10  3  4  6 この横にならんだ数値をコピーして、ファイルBに    A  B  C  D  E --------------------------------- 1 | 5 2 | × 3 | 10 4 | × 5 | 3 6 | × 7 | 4 8 | × 9 | 6 こんな風に縦に、しかもセル間隔をひとつずつ空けてペーストしたいのです。 ファイルAの方の数値はSUBTOTAL関数を使用して出した結果の数値が入ったセルです。 貼り付けしたいセルだけをCtrlキーを押しながら選択して張り付けると 縦のセルの数×ファイルAの数値セルの数 で貼り付けされてしまいます。 「形式を選択して貼り付け」などもやってみましたが、うまくいきません。 なにかよい方法があったら教えていただきたいです。 よろしくお願いします。

  • マクロの記録で任意の文字を検索してそのセルから範囲を選択したいのですが

    マクロの記録で任意の文字を検索して、見つかったセルから範囲を選択して別なシートへ切り取りし、貼り付けたいですが何か方法はありますか?現在は検索をしたセル番号になってしまいます。 マクロはじめたばかりです。 検索→い→(A2:C5)選択&切り取り→sheet2貼り付け→検索(sheet2)→え→(A3:C4)選択&切り取り→sheet3貼り付け sheet1    →sheet2   →sheet3  ABC     ABC    ABC 1あかさ    1いきし   1えけせ 2いきし    2うくす   2おこそ 3うくす    3えけせ 4えけせ    4おこそ 5おこそ できれば検索で発見されたA2やA3を任意のアクティブセルにし、範囲はC列の一番下のセルを選択し切り取りたいのですができますでしょうか。

  • エクセルで消えないセルを作りたい。

    よろしくお願いします。 エクセルで、例えばB2のセルに「aa」、B3のセルに「bb」と入力したとします。 そして、A1からC3まで範囲選択をしてDeletをおしてもB2のセルの「aa」だけは消えないようにすることは可能でしょうか? エクセルは2000です。

  • エクセルの範囲セルの範囲セルについて

    ExcelVBAで、ある範囲のセルを基準として、その範囲の中の範囲を表したい のですが、どうすればよいのでしょうか? 以下のセルで、A1:D2の範囲を使ってA2からD2の範囲を表す方法です。 A1 B1 C1 D1 A2 B2 C2 D2 A2のセルはRange("A1:D2").Cells(2,1)で表すように Range("A2:D2")でなく、Range("A1:D2")を使ってA2からD2の範囲を表す方法が知りたいです。

  • 【VBA】フォルダ内の複数Excelのセルをコピー

    お世話になります。 初級者ですが、Excel 2002のVBAについてご質問をさせて頂きます。 【概要】  あるフォルダ内にある複数のExcelファイルの、特定のセルを  1つのExcelファイルに集約します。 【詳細】  1.あるフォルダ内に複数のExcelファイルがあります。Excelファイルの数は、その日によって   ことなります。  2.選択画面から、この複数のExcelファイルを選択し、選択したExcelファイルの   それぞれの「A1セル」「B1セル」「C1セル」を、「1つのExcelファイル」に張り付けます。  3.「貼り付け」→「次の列へ移動」→「貼り付け」→「次の列へ移動」というサイクルを、   選択したExcelファイルの数だけ繰り返します。  4.集約したExcelファイルのイメージは以下のとおりです。        A列 B列 C列 D列 E列 F列 G列 H列  。。。。   1行目 A1 A1 A1 A1 A1 A1 A1 A1 。。。。   2行目 B1 B1 B1 B1 B1 B1 B1 B1 。。。。   3行目 C1 C1 C1 C1 C1 C1 C1 C1 。。。。 教えて!gooの回答で、「複数のシートを、1つのExcelファイルに集約する」ものがあったので、 それを参考にしようとしましたが、僕の実力ではできませんでした。 ご助言を頂けると非常に助かります。よろしくお願いします。

  • Excel 範囲の選択

    Excelで隔行毎に選択し、違うシートに貼り付けをしたいのですが、セル毎にCtrlで選択せずに早く選択する方法はありませんでしょうか? 例:選択したいセル(A2,A4,A6,A8,A10) 宜しくお願いいたします。

  • エクセル セル毎一発で入れ替える方法

    エクセルで表を作っているときに たとえばA1の内容と C6の内容を一発で入れ替える方法ってあるのでしょうか。 今は一旦別のセルに切り取り貼り付けして 入れ替えているのですが、 これが一発でできたら便利と思うのですが、 宜しくお願いします。

  • エクセルで、このようなセル検索は出来ますか?

    お世話になります。 エクセルで、このようなことは出来ますか? 教えて下さい。 Aのセルの立て方向に、1と、0、が、ランダムに入れてあります。 Bのセルの立て方向に、1と、0、が、ランダムに入れてあります。 それで、Aのセルに、1が記入されていて、且つ、Bのセルには、0が記入されている 行を、一発で、検索したいのです。 Aセルに、 1 が、記入されているのを検索する方法は、簡単で、理解しております。 でも、Aセル且つBセルのある条件で、検索する方法は、私にはわかりません。。 出来る方法は、ありますか?教えて下さい。 検索できたら、例えば、128行目に、 1-0 がありました。 次の検索を押すと、次の 1-0 を探すことができたら、最高です。。 どうでしょうか?

  • Excel 複数セルの一括コピー

    Excelで, 例えばA1からH10の範囲のデータを,罫線やセルの結合も含めて,そっくりそのまま,別ブック(10ファイル)に同じようにコピーしたいです。 コピー → 貼り付け を10回繰り返してもいいですが,セル参照や関数など,他の方法があれば,ぜひ教えてください。

  • EXCEL97で、結合セルをコピー、値貼付けはできないのでしょうか

    EXCEL97を使用しています。 結合セルと結合していないセルが共に含まれた範囲を指定してコピーし、別のセルに『形式を選択して貼付け』の『貼付 値』を行った場合に「この範囲には同じ操作のセル結合が必要です」とのメッセージが出て、貼付けできません。 ※ 上記の選択範囲の例   A1とB1をセル結合した上、A1:B4を範囲指定(A2:B4は通常セル) 書式設定のボタンの『←a→』という形のものを使っているのですが、95の時はセル結合機能までが付与されてなかったので、問題なかったのですが、97になって困っています。 以下のようなアイデアはありますが、それ以外に良いものはあるでしょうか。 1.セル結合した部分とセル結合していない部分を2回に分けて行う 2.上記ボタンを使用せずに、セルの書式の横位置を『選択範囲内で中央』を選択

専門家に質問してみよう