Excel 2007 VBAでテキストBOXがコピーできない

このQ&Aのポイント
  • 顧客の手紙作成マクロで、Excel 2007 VBAでテキストBOXがコピーできない問題が発生しています。自宅のExcel 2003では成功しているが、会社のExcel 2007では2通目以降にテキストBOXがコピーできません。
  • マクロは、顧客名簿を含むSheet1と顧客用の手紙を含むSheet2を使用します。手紙は20行で1通で、必要な枚数分だけ21行目に挿入されます。
  • マクロの一部を示します。 Dim 資料数 As Integer Dim 複写数 As Integer Sub Mc1_ページ増() 資料数 = Application.WorksheetFunction.Count(Range("Sheet1!A2:A65536")) 複写数 = (資料数 - 2) * 20 Rows("21:40").Copy Rows("21:21").Resize(複写数).Insert Shift:=xlDown End Sub
回答を見る
  • ベストアンサー

Excel 2007 VBAでテキストBOXがコピーできない

Excel 2007 VBAでテキストBOXがコピーできない 顧客の各々に送付する手紙を作成するファイルを作っております。 ファイル容量が大きいので、マクロで必要手紙を作ろうとしております。   Sheet1 ・・・ 顧客名簿。A列は通し番号。   Sheet2 ・・・ 顧客用の手紙。(テキストBOX併用) 手紙は20行で1通。A1~K20が1頁目、A21~K40が2頁目になるよう雛形を作成し、 必要枚数分だけ、21行目に挿入して増やそうと考えました。 そこで下記のようにマクロを作成しました。 自宅(Excel 2003)では成功したのですが、会社(Excel 2007)ではテキストBOX がコピーされず困っております。 (最初の1通目はコピーできるのですが、2通目以降にコピーできません)   Dim 資料数 As Integer   Dim 複写数 As Integer   Sub Mc1_ページ増()    資料数 = Application.WorksheetFunction.Count(Range("Sheet1!A2:A65536"))   Worksheets("Sheet2").Select   複写数 = (資料 - 2) * 20   Rows("21:40").Copy   Rows("21:21").Resize(複写数).Insert Shift:=xlDown   End Sub 何処がダメなのでしょうか? ご教授頂けると助かります。 分かる方いらっしゃいましたら、よろしくお願いします。

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

  • ベストアンサー
  • takana_
  • ベストアンサー率44% (21/47)
回答No.1

おっしゃる通り、手動で挿入を実行してみましたが、 Excel2003ではテキストボックスが複数複製されますが、 Excel2007ではテキストボックスが1個しか複製されないようです どうやらマクロが問題ではなく仕様のようです。 なのでマクロを改造して Rows("21:21").Resize(複写数).Insert Shift:=xlDown をループで複写数回数実行させればどうですか? こんな感じ(未検証) FOR i=1 TO 複写数 Rows("21:40").Copy Rows("21:21").Insert Shift:=xlDown NEXT

OKERAUMI
質問者

お礼

ご回答頂き有難うございます。 変数(複写数)の値計算を変更する必要がありましたが、FOR TO を使う事でテキストボックスの複製ができました。 ただ複製する回数が100件を超える為、時間が掛かり過ぎるのが難点でしたので、今回はテキストボックスを使用しない方向で工夫しようかと思います。 しかし、やはり2003と2007では仕様が違うのですね。ご回答頂けた事でその事が理解できたので、今後のマクロ作成で下手に悩まずに済みそうです。 有難うございました。

関連するQ&A

  • VBAで行数を数えてテキストデータにコピーしたい。

    エクセルの実行ボタンを押すとアクティブシートにあるデータのA7から空白までの行数を数えて、その行数と同じ分、テキストデータをSQLテキストファイルにコピーしたいのですが、うまくいきません。 どなたか分かる方教えてください。 出来れば、下記のVBAを生かして組み込みたいです。 よろしくお願いします。 Private Sub CommandButton1_Click() Dim myDate As String Dim myPath As String Dim NewPath As String Dim FNo As Integer Dim Ar(1) As String Dim SqlData As String Dim i As Integer Dim j As Integer '★配列にsqlファイルのタイトルを代入★ Ar(0) = "TEST1.sql" Ar(1) = "TEST2.Sql" '★sqlデータの内容を入れる★ sqlData0 = ActiveSheet.Rows("A7:")(xlDown) * "testdata_a" & Chr(13) & Chr(10) SqlData1 = ActiveSheet.Rows("A7:")(xlDown) * "testdata_b" & Chr(13) & Chr(10) & "testdata_c" myDate = Format(Date, "yyyymmdd") myPath = ThisWorkbook.Path NewPath = myPath & "\" & myDate ↑VBAは省略して途中まで記載しました。

  • ワード2007へのテキストボックスのコピーについて教えてください。

    ワード2007へのテキストボックスのコピーについて教えてください。 エクセル2007作成のシートにあるテキストボックスをコピーしてワード2007に貼付けると図形として取り扱われ、編集ができません。ワード2003では図形にはならず、そのまま使えたのですが、対処を教えてください。

  • エクセルVBA 別シートからのコンボボックス連動

    エクセルVBA 別シートからのコンボボックス連動について Book1(多人数入力用ブック) ・入力シート ・データ用シート Book2(反映用ブック) ・シート1 Book1にコンボボックスが2列 テキストボックスが2列 * 6行のユーザーフォームを作成しました。 コンボボックス1 コンボボックス2 テキストボックス1 テキストボックス2 コンボボックス3 コンボボックス4 テキストボックス3 テキストボックス4 ・ ・ ・ 左のコンボボックスで「あ」が選ばれたときには、右のコンボボックスで「あ行の顧客」・・・というように連動させたいと考えております。 データ用シートのデータは、   A      B          C 1 あ あ行で始まる顧客 か行で始まる顧客 2 か 3 さ 4 た 5 な 6 Private Sub UserForm_Initialize() Dim c As Range ComboBox1.RowSource = "データ用シート!A1:A9" End Sub Private Sub ComboBox1_Change() 'Dim Rng As Range 'Dim i As Long i = ComboBox1.ListIndex If i > -1 Then Dim c As Range Set Sh = Worksheets("データ用シート") Set Rng = Worksheets("データ用シート").Range("B2:I30") ComboBox2.Value = "" ComboBox2.RowSource = Rng.Columns(i + 1).Address End If End Sub 上記コードですと、コンボボックス2が入力シートのデータを表示してしまいうまくいきません。 欲をいえば、 Book1(多人数入力用ブック)入力シートの特定セルに コンボボックス2・テキストボックス1 コンボボックス4・テキストボックス3というように続けて1セルに反映 Book2(反映用ブック)シート1に コンボボックス2・テキストボックス1・テキストボックス2 を各1セル 1行に反映させたいと考えております。 まったく知識がないのですが 仕事上どうしても必要となったので、各種サイトを見よう見真似でやっております。 ご助力いただければ幸いです。

  • Excel オーダーフォームのテキストボックス入力について

    オーダーフォームを作成し、テキストボックスを2つ以上作成し、コマンドボタンを1つ作りました。 同じ行ですべてを入力できるようにしたいのですが、どうしたらよいでしょうか? テキストボックス1の値を入力するためのコマンドは、最下位の行を探してそこに入力するようなコマンドを作っているはずです…その横の列にテキストボックス2の値を入力し、その横の列にテキストボックス3の値を入力し…というようにしていきたいのです。 Private Sub CommandButton1_Click() Dim lRow As Long With Worksheets("sheet1") lRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & lRow + 1).Value = TextBox1.Value End With TextBox1.Value = "" TextBox1.SetFocus End Sub

  • Excel VBAで検索結果を新規ブックにコピー

    Excel VBAの質問です。 コンボボックスで選択した文字列とSheet1のC列の文字列が一致したら、 その行を新規ブックのSheet1にコピーしたいのですが、うまくできません。 新規ブックは開くのですが、データはコピーされていません。 既存ブックのSheet2にはコピーできるので、たぶん、新規ブックのSheet1へコピーという 命令がうまくかけていないのだと思います。 書籍やネットで調べてもよく分かりませんでした。 大変困っているので、どなたかご教授ください。よろしくお願いします。 元のSheet1は以下のようにデータが入力されています。 例えば、コンボボックスで「めがね」と選択されたら、1,4,5行目のC列と一致するので それらの行を新規ブックにコピーしたいのです。 A B C D ----------------------------- 1|10 10:00 めがね 保管中 2|11 12:00 衣服  倉庫 3|12 13:00 自転車 保管中 4|13 11:00 めがね 保管中 5|14 13:00 めがね 倉庫 Private Sub Search_Click() Dim SearchWord As String Dim gyou As Long Dim word As String Dim LastRow As Long Dim count As Integer Dim baseBook As Workbook Dim newBook As Workbook Dim baseSheet As Worksheet Dim newSheet As Worksheet SearchWord = cmbsSyutokubutu_search.Text Set baseBook = ThisWorkbook Set baseSheet = baseB.Worksheets("Sheet1") baseSheet.Activate With Worksheets("Sheet1") count = 0 gyou = 4 LastRow = baseSheet.Cells(Rows.count, 5).End(xlUp).Row Set newB = Workbooks.Add Set newS = newBook.Worksheets("Sheet1") Do While Cells(gyou, 3) <> "" word = Cells(gyou, 3) If InStr(word, SearchWord) >= 1 Then Rows(gyou).Copy newBook.Cells(Rows.count, 1).End(xlUp).Offset(1, 0) End If gyou = gyou + 1 Loop End With End Sub

  • テキストボックスの大きさを、基準の大きさに戻す(エクセルVBA)

    図形のテキストボックスの大きさを取得して、その値を各テキストボックスの基準の大きさとして記録しておき、テキストボックスの大きさをマウスでドラッグして大きさを変えた後、ボタン1つでもとの大きさに戻したいのですが、どのようにすればよいでしょうか? 1)図形のテキストボックス、大きさの取得方法は? 2)基準の大きさと記録する方法は? 3)記録された大きさに戻すには?(シート上に配置されたボタンで実行) ※ 複数のシートに複数のテキストボックスがあります。 ※ シート毎にセットします。(シート毎にテキストボックスのサイズが違う為) ※ 現在、各テキストボックスには、基準位置がセットしてあり、ボタンで基準位置へ戻る仕組みが組まれています。(これをそのままにして・・・) ※ エクセル97と2000で使えるようにします。(作成は97) 宜しくお願い致します。

  • 【エクセル】テキストボックスのサイズを他のテキストボックスにもコピーできますか?

    こんにちは、みなさん!! AとういうテキストボックスのサイズをBとういう テキストボックスのサイズにコピーできますか? 例えば、テキストボックスAの幅が3高さが1だとします。 テキストボックスBのサイズをAと同じにするには、書式 設定から、高さ幅3高さ1と入力して同じサイズのテキスト ボックスにします。 これを、もう少し簡単にできる方法はありませんか? ご存知の方いらっしゃいましたらよろしくお願いします。

  • エクセルVBA コンボBOXの相互連動

    皆さんこんにちは。 エクセル2013を使用しています。 ネットや本では 地方名>都道府県名>市町村名のような 順にコンボボックスで行う絞り込み検索の方法が たくさん載っています。 コンボボックス1を選択しないとコンボボックス2・3の 選択肢は表示されないようなものです。 ですが、私がやりたいのは どのコンボボックスから選択しても 残りのコンボボックスが連動するものを作りたいのです。 おそらくやりたい事はオートフィルターだ!と思ったので 今、私の知りうる数少ない知識を駆使した結果がこれです。 (1)原本Sheetをコピー→コンボ用Sheetを作成 (2)コンボ用SheetのA~C列を列ごとに重複除去をし  除去した内容をE~F列に記載 (3)E~Fの内容をコンボボックス1~3のコントロールにする (4)コンボボックスのどれかを選択すると  そのコンボボックスのTEXTでオートフィルターがかかる、  原本Sheet対応列を絞り込み (5)コンボ用Sheetを削除 (1)~(5)エンドレス・・・みたいなコードでやりたい事に対応出来ましたが 何しろシートのコピー・削除が何回もあるので 重くて重くてとても使い物にはなりません。 どうにか重くならずに同じような作動をするコードはないでしょうか。 このような感じで原本Sheetは作成されております。 [原本Sheet]     A    B    C 1   駅名  顧客名  店舗名 2   ○    △    □ 3   ○    ▲    ■ 4   ◎    △    □ 5   ◎    ▽    ◇ 6   ●     ▽    ◆

  • VBA 空白テキストボックスカウント

    こんにちは、よろしくお願いします。 ユーザーフォーム上にテキストボックスが 1-31が4段あります。 1-31には数字が入っているところもあれば、空白の所もあります。 このなかの数字が入っているテキストボックスの数をカウント したいのですがうまくいきません。 自分なりにやってみたこと テキストボックスの空白を数えて Dim i As Integer For i = 1 To 31 If Controls("TextBox" & i).Value = "" Then s_su.Text = Exit Sub s_suはカウントされた数字を表示するテキストボックスです。 上の式の =の右側に何を書いたらいいかがわかりません。 純粋に空白のテキストボックスを数えることは可能でしょうか。 また上記のテキストボックスを1-31数字の合計を別のテキストボックスに 表示しようと思いますが、 val(TextBox1.Text) + val(TextBox2.Text)~これを31回書いてますが もっとスマートに書けるようなコードはありますか。

  • ワードでテキストボックスをコピーすると・・・・

    ひとつのテキストボックスをコピーして貼り付けた後、コピーしたほうを編集しようとすると、元のテキストボックスも同時に編集されてしまいます。 元のテキストボックスにもよりますが、時おりこのようなテキストボックスが出現します。 理由がわからないのですが、どうしたらよいのでしょうか? いちいち新しいテキストボックスを作成するのが面倒なので、なんとかコピーで利用したいのですが、 今までこのようなことはありませんでした。 ファイルに問題があるのでしょうか? それとも何らかの設定でこのようになるのでしょうか? ご存知の方がいらっしゃいましたら、教えてください。

専門家に質問してみよう