Application.InputBox をtype8で使う時に、その取得した範囲を別のシートのA1から下に順々に格納したいのですが、エラーは出ないのですが、どうしても空振りしてしまいます。
エラーが出ないので余計に困っています。
お知恵を貸してください。
シートを追加して範囲という名前にしてください。
そこに、データを保存してみました。
Option Explicit Private Sub CommandButton1_Click() Dim tenki As Range Dim str As String Dim WH As Worksheet Dim i As Long '範囲保存用のシートを指定 Set WH = Worksheets("範囲") str = Application.InputBox(prompt:="集計名を入れてください", Title:="集計名", Type:=2) If str = "False" Then Exit Sub 'キャンセルを選んだときのためエラートラップ On Error GoTo ErrNot Set tenki = Application.InputBox(prompt:="セル範囲を選択", Title:="セルを選択", Type:=8) On Error GoTo 0 i = 1 While WH.Cells(i, 1).Value <> "" i = i + 1 Wend WH.Cells(i, 1).Value = str WH.Cells(i, 2).Value = tenki.Address ListBox1.AddItem (str) ListBox1.ListIndex = ListBox1.ListCount - 1 Exit Sub ErrNot: End Sub Private Sub ListBox1_Change() Dim WS As Worksheet Dim WH As Worksheet Dim r As Range Dim w As Worksheet Dim myRow As Long Dim tenki As Range If ListBox1.ListIndex = -1 Then Exit Sub '転記先のシートを指定 Set WS = Worksheets("集計") '範囲保存用のシートを指定 Set WH = Worksheets("範囲") WS.Cells.Clear myRow = 1 For Each w In Worksheets If w.Name <> WS.Name And w.Name <> WH.Name Then Set tenki = w.Range(WH.Cells(ListBox1.ListIndex + 1, 2).Value) tenki.Copy WS.Cells(myRow, 1).PasteSpecial Paste:=xlAll, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False WS.Cells(myRow, tenki.Column).ColumnWidth = tenki.ColumnWidth WS.Cells(myRow, tenki.Column).RowHeight = tenki.RowHeight myRow = myRow + tenki.Rows.Count End If Next w Application.CutCopyMode = False ListBox1.ListIndex = -1 End Sub
更にThisWorkbookのWorkbook_Openのところに次のように書けば、ブックを開いたときにリストボックスが戻ります。
Private Sub Workbook_Open() Dim i As Integer i = 1 While Worksheets("範囲").Cells(i, 1).Value <> "" Worksheets("Sheet1").ListBox1.AddItem (Worksheets("範囲").Cells(i, 1).Value) i = i + 1 Wend End Sub
シート名とかはお使いの環境に合わせてください。
http://pintxos.blog.bai.ne.jp/?eid=82496
Range型変数の使い方を間違えてませんか?
仕様の説明どおりにプログラムが作られているのかどうかは、プログラムがのってないのでわかりません。
このような質問のときは、どのようにプログラムしているのかのせるのが一番です。
回答ありがとうございました。
下記のコメント欄にソースを書きました。
range型は確かによく分からなかったので、受け側をvariantにしたんですがそれでもだめでした。
下記は、そのDimはとってあります。
コメントのコードで自分の環境では普通にコピーできました。
コピーできない原因が特定できないと意味は無いかもしれませんが、リストボックスを使う方法を紹介します。
ボタンは使っているようなので、更にリストボックスを追加して、そのイベントに次のコードを書き込んでみてください。
ただし、リストボックスの内容はブックを開くたびにクリアされます。
その場合は、別のシートに範囲のリストを書き込んでおいて、開いたときに読み込ませるとかすればいいです。
Option Explicit Private Sub CommandButton1_Click() Dim tenki As Range 'キャンセルを選んだときのためエラートラップ On Error GoTo ErrNot Set tenki = Application.InputBox(prompt:="セル範囲を選択", Title:="セルを選択", Type:=8) On Error GoTo 0 ListBox1.AddItem (tenki.Address) ListBox1.ListIndex = ListBox1.ListCount - 1 Exit Sub ErrNot: End Sub Private Sub ListBox1_Change() Dim WS As Worksheet Dim r As Range Dim w As Worksheet Dim myRow As Long Dim tenki As Range If ListBox1.ListIndex = -1 Then Exit Sub '転記先のシートを指定 Set WS = Worksheets("集計") WS.Cells.Clear myRow = 1 For Each w In Worksheets If w.Name <> WS.Name Then Set tenki = w.Range(ListBox1.Value) tenki.Copy WS.Cells(myRow, 1).PasteSpecial Paste:=xlAll, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False WS.Cells(myRow, tenki.Column).ColumnWidth = tenki.ColumnWidth WS.Cells(myRow, tenki.Column).RowHeight = tenki.RowHeight myRow = myRow + tenki.Rows.Count End If Next w Application.CutCopyMode = False ListBox1.ListIndex = -1 End Sub
ありがとうございます。
こういったイメージです。感激。
それぞれのRangeデータに「日報得意先名」「日報今後の課題」など名前をつけたいのですが、これはどうしたらよいでしょうか。
理想的には、2バイト文字をクリックすると、それに紐付けされたレンジが、転記されるというものです。
ひとつ考えたのは下記です。
1InputBoxで「集計名を入れてください」と入力を促す
2それをA列に入れる
3取得したレンジをB列に入れる
4ListBoxにはA列のデータが入るようにして、offsetでとなりのB列のデータを転記する
もっと洗練された方法があればご教示ください。
よろしくお願いいたします。
シートを追加して範囲という名前にしてください。
そこに、データを保存してみました。
Option Explicit Private Sub CommandButton1_Click() Dim tenki As Range Dim str As String Dim WH As Worksheet Dim i As Long '範囲保存用のシートを指定 Set WH = Worksheets("範囲") str = Application.InputBox(prompt:="集計名を入れてください", Title:="集計名", Type:=2) If str = "False" Then Exit Sub 'キャンセルを選んだときのためエラートラップ On Error GoTo ErrNot Set tenki = Application.InputBox(prompt:="セル範囲を選択", Title:="セルを選択", Type:=8) On Error GoTo 0 i = 1 While WH.Cells(i, 1).Value <> "" i = i + 1 Wend WH.Cells(i, 1).Value = str WH.Cells(i, 2).Value = tenki.Address ListBox1.AddItem (str) ListBox1.ListIndex = ListBox1.ListCount - 1 Exit Sub ErrNot: End Sub Private Sub ListBox1_Change() Dim WS As Worksheet Dim WH As Worksheet Dim r As Range Dim w As Worksheet Dim myRow As Long Dim tenki As Range If ListBox1.ListIndex = -1 Then Exit Sub '転記先のシートを指定 Set WS = Worksheets("集計") '範囲保存用のシートを指定 Set WH = Worksheets("範囲") WS.Cells.Clear myRow = 1 For Each w In Worksheets If w.Name <> WS.Name And w.Name <> WH.Name Then Set tenki = w.Range(WH.Cells(ListBox1.ListIndex + 1, 2).Value) tenki.Copy WS.Cells(myRow, 1).PasteSpecial Paste:=xlAll, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False WS.Cells(myRow, tenki.Column).ColumnWidth = tenki.ColumnWidth WS.Cells(myRow, tenki.Column).RowHeight = tenki.RowHeight myRow = myRow + tenki.Rows.Count End If Next w Application.CutCopyMode = False ListBox1.ListIndex = -1 End Sub
更にThisWorkbookのWorkbook_Openのところに次のように書けば、ブックを開いたときにリストボックスが戻ります。
Private Sub Workbook_Open() Dim i As Integer i = 1 While Worksheets("範囲").Cells(i, 1).Value <> "" Worksheets("Sheet1").ListBox1.AddItem (Worksheets("範囲").Cells(i, 1).Value) i = i + 1 Wend End Sub
シート名とかはお使いの環境に合わせてください。
大変ありがとうございました。
このトピックスは全部解決してしまいました。
これをカレンダーコントロールと組み合わせたいのですが、これは質問内容を整理して、別質問したいと思いますので、ぜひまた回答いただけると幸いです。
大変ありがとうございました。
このトピックスは全部解決してしまいました。
これをカレンダーコントロールと組み合わせたいのですが、これは質問内容を整理して、別質問したいと思いますので、ぜひまた回答いただけると幸いです。