人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルVBAについて質問です。

現在、指定した数分の文字をランダムに置換するプログラムを作成したいと考えています。

プログラムを実行したいエクセルの状況ですが以下になります。

http://oskuni7.sakura.ne.jp/hatena/question8/question.htm

★行いたい処理の流れは以下になります。

プログラムを実行するとダイアログボックスが出てきて、変更したい文字数を入力してくださいの画面が出てきます。

その後、置換したい文字数を入力し、OKボタンを押すと指定した数字分の文字をランダムに変更してくれます。

エクセルのURLでは ああ と書かれてある文字を えええ に指定した分だけ変更するようになっています。

上記の流れの処理のプログラムを組める方おりましたら、お手数をおかけしますがよろしくお願いいたします。

●質問者: aiomock
●カテゴリ:コンピュータ インターネット
✍キーワード:エクセル ダイアログ プログラム ボタン ボックス
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● s-n-k
●100ポイント ベストアンサー

http://oskuni7.sakura.ne.jp/hatena/question8/question.htm ダミーです。

Sub test()

 Randomize

 Const SrcWord As String = "ああ"
 Const DstWord As String = "えええ"

 Dim MyBook As Workbook
 Dim TargetSheet As Worksheet
 Dim TargetRange As Range
 Dim FindCell As Range
 Dim FindCells As New Collection
 Dim RepCount As Long
 Dim RndNums() As Long
 Dim RndNum As Long
 Dim i As Long
 
 Set MyBook = ThisWorkbook
 Set TargetSheet = Sheets("Sheet1")
 Set TargetRange = TargetSheet.Range(Range("AH1"), Range("AH65536").End(xlUp))
 
 RepCount = InputBox("何個のデータを変更しますか?")
 
  ' 置換する対象の文字列を取得
 Set FindCell = TargetRange.Find(SrcWord, , xlValue, xlWhole, xlByRows, xlNext, True)
 If Not FindCell Is Nothing Then
 FindCells.Add Item:=FindCell, key:=FindCell.Address
 End If

 Do While True
 Set FindCell = TargetRange.FindNext(FindCell)
 If FindCell Is Nothing Then
 Exit Do
 End If
 If FindCells(1).Address = FindCell.Address Then
 Exit Do
 End If
 FindCells.Add Item:=FindCell, key:=FindCell.Address
 Loop
 
 If FindCells.Count < RepCount Then
 MsgBox "データ数が少ない"
 End If

  ' 乱数のテーブルを作る
 ReDim RndNums(FindCells.Count)
 For i = 0 To FindCells.Count
 RndNum = Int((FindCells.Count + 1) * Rnd)
 RndNums(i) = RndNum
 RndNums(RndNum) = i
 Next i

  ' 指定された分だけ値を書き換える
 For i = 0 To RepCount - 1
 FindCells(RndNums(i)).Value = DstWord
 Next i

End Sub

このような処理でいかがでしょうか。

◎質問者からの返答

ご回答ありがとうございます。

プログラム実行させていただきました。

実行してみたところ

エラー9

インデックスが有効範囲にありません

というエラーが発生しております。

選択範囲として H4?H65536まで設定をしたりもしたのですが、こういったことでもないのでしょうか。

プログラムですが、””文字列の中だけ変更しました。

対処方法としてはどのような対処方法があるのでしょうか?

お手数をおかけしますがよろしくお願いいたします。


2 ● abhrsh
●100ポイント

http://www.yahoo.co.jp/

URLはダミーです。


横から失礼します。

s-n-kさんの回答にあるスクリプトで、

「インデックスが有効範囲にありません」

というエラーが出るということは、

Excelのバージョンの違いが原因かもしれません。


下記の部分を修正されれば解消するのではないでしょうか。

Set FindCell = TargetRange.Find(SrcWord, , xlValue, xlWhole, xlByRows, xlNext, True)

Set FindCell = TargetRange.Find(SrcWord, , xlValues, xlWhole, xlByRows, xlNext, True)
◎質問者からの返答

ご回答ありがとうございます。

プログラムですが通常に起動いたしました。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ