• 締切済み

エクセルのマクロについてなのですが…

現在マクロを使用して数字の入力を行おうとしております。 セルのB2は変数iを入力(例えば5を入力) 値を入力する範囲はセルのCells(1,1)からCells(i,1)(下記あ~お)に 1~iまでの数字を重複する事無く入力します。 なお、セルのCells(1,1)からCells(i,1)に入力する数字は Rndを使用して乱数にしたいのですが 乱数の入力までは何とか辿り着いたのですが どうしても重複してしまいます。 ネットで調べたのですが、コピレば使えるのですが マクロの意味が良く分からないので 出来れば行ごとの意味も教えていただきたいのですが… ワガママばかりで申し訳ありません。 A B C D 1 あ 2 い 5 3 う 4 え 5 お 6 ・ ・ ・

みんなの回答

noname#91724
noname#91724
回答No.1

>出来れば行ごとの意味も教えていただきたいのですが… 解説したいのはやまやまだけど、肝心のコードがないと・・(^^; ちなみに重複しないように乱数を発生させるのは、ちょっと工夫が必要かも。 この過去回答が参考になるかもしれません。 ↓ http://okwave.jp/qa1239644.html 回答少なかったら一旦締めて、オフィス系ソフトのカテゴリで再質問してね。

関連するQ&A

  • エクセルのマクロについて(重複セル色付け)

    現在、エクセルで重複セルに色をつける際に、 条件付き書式から重複セルに色をつけております。 しかし、行数が多くなってくるにつれ、表が重くなってきましたので マクロで出来ないかをお教えいただきたいです。 重複のチェックは I から AYまで数字が入っており、 各行ごとの I から AYまでチェックをし、重複した数字のセルに色をつけたいです。 BからHは任意に数字を入力をしますので、Bに文字が入っている行について I から AYまでの重複チェック→色付けとなります。 そして、データも日々増えていきますので、 行の下からBに数字が入っているかを検索し、 入っていたら、その行から上に向かって各行ごとにチェック・・・ としたかったのですが、理屈は分かっていても組めないという情けない結果になり、 皆様にご相談させていただいた次第です。 表現が下手で申し訳ありませんが、ご回答をお願い致します。

  • マクロでセルをランダムに並び替えたい

    マクロ初心者です。 Sheet1のB4に1、B1003に1000 というように整数が小さい順番にセルに入力してあり、 Sheet2のB4からB1003までにそれらのセルをランダムに並べ換え、 さらにそれらのセルをSheet3のB4からB1003に大きい順(B4に1000、B1003に1といったように)に並び替えたいのですが、 どうすればいいでしょうか。 Sub 並び替え() Dim RndArr(999, 0) As Variant Dim i As Integer, c As Integer Dim rndTmp As Integer Randomize i = 0 RndArr(i, 0) = Int(1000 * Rnd) + 1 Do Re: rndTmp = Int(1000 * Rnd) + 1 For c = 0 To i If rndTmp = RndArr(c, 0) Then GoTo Re Next c i = i + 1 RndArr(i, 0) = rndTmp Loop Until i > 999 Range("b4.Sheet2", "b1003.Sheet2") = RndArr End Sub 今わかっている状況は上記の通りですが、 このマクロだと、セルを並び替えているのではなく乱数を当てはめているだけなので、 整数が重複してしまいます。 よろしくお願いします。

  • エクセル2000のマクロで、if文が想定通りに動かない

    90から93列目にかけて、データが 0又は3~4桁の数字が入っている状態です。 4810,0,0,2430 以下はマクロの抜粋です。 やりたいことは、0でなければ各変数に1を代入し、95列めに合計を入力します。 If Cells(i, 90) <> 0 Then w = 1 If Cells(i, 91) <> 0 Then x = 1 If Cells(i, 92) <> 0 Then y = 1 If Cells(i, 93) <> 0 Then z = 1 Cells(i, 95).Value = w + x + y + z このマクロを実行しますと、実際には0でない列が2列にもかかわらず、95列目に3と入力されてしまいます。1行ずつ実行してみたら、if文の3行目の92列目の判定が変です。 実行中に、カーソルをかざすとCells(1, 92)=0と表示されるのですが、合計を代入するところの y には1が代入されてしまっています。 何か間違っているんだと思いますが、分かりません。よろしくお願いします。

  • エクセルのマクロ(VBA)について質問です。

    お世話になります。 エクセルのマクロ(VBA)について質問があります。 下記、わかりにくいと存じますが、お力添え下さい。 ある表があります。 項目としてA列「名前」B列「連絡先」C列「順番」とんでE列に 「乱数」があります。 2行目にこれら項目名が並んでおり、3行目から34行目までは データ入力範囲になります(32名入力出来る。1行目は表のタイトルです) 入力したデータを順不同に並べたく、「順番」項目は乱数を用いた数字を入力させます。 ここから、マクロの登録をします。 ~↓登録中↓~ ・「乱数」項目の1番上(E3)から一番下(E34)までドラッグ  (範囲指定)し、右クリック→コピー ・「順番」項目の一番上(C3)で右クリック→”形式を選択して貼り付け” ”値”にチェックを付けて「OK」 ☆「順番」項目の一番上(C3)から「名前」項目の一番下(A34)まで ドラッグ(範囲指定)し、”昇順で並べ替え”ボタンを押す ~ここまで~ (乱数は、毎回変化してしまうのを防ぐ為、別項目から引っ張ってきて 値だけをコピーするようにしています) このようにマクロを登録しました。 しかし、毎回32名を入力するわけではなく、時には32名未満の入力をする場合があります。 別のセルF40に、COUNTA関数より取った「名前」項目に登録されている数を表示させているのですが、 ☆部分の処理にてこの数だけ範囲指定して並べ替えたいのです。 (セルC3から登録されている人数分だけ範囲指定したい、ということです。20名だけ登録されていれば、 セルC3からセルA22を範囲指定する。指定した部分だけを並べ替える) 32名未満の時、乱数に元づく順番で並べ替える際、データの入って いない行も順番に並んでしまうのですが、空白の行はそのままにし、 データの入っている行だけを上(セルA3)から詰めて並べたいのです。 VBAの編集で、COUNTA関数の結果の数字を変数に代入して使用したいのですが、 そのやり方がわかりません。 どなたかお知恵をくださいますよう、お願い致します。 (わかりにくい記述なので、必要に応じて補足させて頂きます。)

  • エクセルのマクロの質問です。

    エクセルのマクロの質問です。 こんにちわ。エクセルのマクロを始めて間もないものです。 下記ようなマクロを組みましたが「Windows("B.xls").Activate」(※の部分)でとまってしまいます。 なぜかもわからず困っています。 Workbooks.Open Filename:="B.xls" For i = 1 To 1000 Step 1 Range(Cells(i, 1), Cells(i, 5)).Select Selection.Copy Windows("A.xls").Activate Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Select ActiveSheet.Paste ※ Windows("B.xls").Activate Next i 一応、動作としては Bのマクロを開く→ループ始点(1000回繰り返す) 一回目⇒A1~B5をコピー→Aのエクセルを開く→A列のセル1行目に貼り付ける→Bのエクセルを開く 二回目⇒A2~B5をコピー→Aのエクセルを開く→A列のセル2行目に貼り付ける→Bのエクセルを開く . . . ループ終点 こんな感じで作成しましたが、どうしても上手く動かないで困っています。 無駄な動作が多いかもしれませんが、ぜひアドバイスをお願いします。 また、もっと簡単な動作ができるのであればそちらもお願いします。

  • エクセルマクロで対応するセルの値を表示したい

    簡単なことで引っかかってしまいました。助けてください A1のセルに数字が入っています。 A2のセルにA1の数字の行、3列目のセルに書いてあるものを表示したい。 A2のセルに =CELLS(A1,3).Value のようなことをしたいのですが、マクロでは CELLS というものがありません。 なにか関数があると思うのですが、教えてください。

  • エクセルマクロで特定の範囲内の検索

    A10からA100までのセルを上から順に調べて、セルにAという文字が入力されているときに、その隣にBという文字を入力するマクロを下記のように作りました。 「セルにAという文字が入力されているとき」という条件に加え、「検索しているセルから上の9個のセル(cells(i-9,1)からcells(i-1,1)まで)にAという文字が入力されていない」という条件を加えたいのです。 Sub 検索() Dim i As Integer For i = 10 To 100 If Cells(i, 1).Value = "A" Then Cells(i, 2).value = "B" End If Next i End Sub つまり If Cells(i, 1).Value = "A" Then  の部分を If Cells(i, 1).Value = "A" かつ Range(cells(i-9,1),cells(i-1,1))にAが入力されていない Then という形にしたいのですが、表現の仕方がわかりません。 ご教示よろしくお願いします。

  • 行ごとに判定するマクロについて教えて下さい

    行ごとに判定するマクロについて教えて下さい。 下記のようなマクロで、添付ファイルのように、行ごとで E列からN列で違った数値がないか、入力されていないセルがないかを調べ 4つすべてのセルが同じ数値でない場合は塗りつぶしはされず O列にOKを表示しないようなマクロを組みたいのですが 現在のマクロだと、行ごとではなく、E3~N102セルまでの中で 同じ数値がないかを判断してしまっているため K11セルやK15セルのように数値が入力されていないにも関わらずO列の部分にOKが出てしまいます。 他の行に同じ数値が入っているのは関係なしにして 11行目なら11行目だけで 15行目なら15行目だけで、というように行ごに判定していくには どのようにすればいいでしょうか? Sub 判定マクロ回転() Dim i As Integer, j As Integer Range(Cells(3, 15), Cells(102, 15)).ClearContents For i = 3 To 102 For j = 5 To 14 Cells(i, j).Interior.ColorIndex = 0 If WorksheetFunction.CountIf(Range("E3:N102"), Cells(i, j)) > 3 Then If Cells(i, j).Row Mod 2 = 1 Then Cells(i, j).Interior.ColorIndex = 6 Cells(i, 15) = "OK" Else If Cells(i, j).Row Mod 2 = 0 Then Cells(i, j).Interior.ColorIndex = 40 Cells(i, 15) = "OK" End If End If End If Next j Next i If WorksheetFunction.CountIf(Range("O3:O102"), "OK") > 99 Then MsgBox "データチェックOK(^O^)b" End If End Sub

  • VBAマクロに詳しい方助けてください!

    Excel2007で乱数を使ったマクロを組んだのですが、同じ数字が繰り返し出力されて困っています。詳しい方、どうか解明をお願いします。 やりたいこと: 100分の1の確率で抽選を繰り返し、当たり(乱数で1が発生したら当たりとする)がでたら「何回目の抽選で当選したか」をセルA1に記入し、セルA2に移行して同じ抽選をやり直す。その作業をA10000まで続ける。 作成したマクロ: Sub 百分の一抽選() Dim r, cou, ransuu As Integer For r = 1 To 10000 'A1 からA10000まで繰り返す  For cou = 1 To 10000  '↑100分の1の確率で当たり(1を当たりとする)が出るまで繰り返す  Randomize '乱数初期化  ransuu = Int(Rnd() * 100) + 1 '1から100までの乱数を作成  If ransuu = 1 Then '乱数で1が発生したら当たりとしてセルに記入  Cells(r, 1) = cou  Exit For '当たりが出たのでひとつ下のセルでの抽選に移行  End If  Next Next End Sub マクロを走らせた結果: 62,43,110,103,43,110,103,43,110,8,94,47,115・・・ 上記のように同じ数字のカタマリができてしまいます。 もちろん乱数ですので連続したり重複したりするでしょうが、 あまりに同じパターンが繰り返されるのでどこかおかしいのだと思います。 マクロを実行するたびに数字はかわるのですが、やはりカタマリになります。 作成・動作環境はWinXP,Excel2007(ファイル自体は.xlsで作成),Core2Duo2.20GHz,メモリ2GBです。 ほかのExcelのバージョンでも試してみましたが同じような結果です。 当方VBA歴3年ほどですが、わけがわからずに不思議でなりません。 詳しい方、ぜひ解明をお願いします。同じマクロ使っても現象が起きないようでしたら こちらの環境のせいだと思われるので、そういったご指摘でもかまいません。 よろしくお願いいたします。

  • VBAでランダムな並び替えをするには

    エクセルのシート1行目に1~40の数字を連番で記入し、3行目に左のセルから順番にランダムに並べるマクロを以下のように書きましたが、動きません。どこが違っているのでしょうか、ご指導いただけますか。 1  2  3   4  5 ・・・・40 ↓  ↓  ↓  ↓  ↓ 21 35 33 14 20 ・・・・ 以下マクロ '1から40までの数を一列に並べる。 for i=1 to 40 cells(1,i)=i:cells(3,i)="" next i for i=1 To 40 msgbox(40-i+1&"枚から1枚選びます") '1から40までの数をランダムに1つ発生させる。    x=int(rnd()*40)) +1 cells(3,1)=cells(1,x) for j=x+1 to 40 cells(1,j-1)=cells(1,j) next j cells(1-j,x)="" msgbox("確認して下さい") cells(3,1)=cells(6,4) cells(6,4)="" x=int(rnd()*39) +1    cells(3,2)=cells(1,x)     next i  

専門家に質問してみよう