- 締切済み
1004 別の名前を入力して下さい。VBAエラー
HohoPapaの回答
- HohoPapa
- ベストアンサー率65% (455/693)
期待している動作は以下でいいでしょうか? シート名:"22年8月21日GBPJPY"がすでにあって、 これとは別なシートのシート名を"22年8月21日GBPJPY"に変更しようとすると 「ActiveSheet.Name = ActiveSheet.Range("$A$1")」のエラー が起きるので、重複する場合は "22年8月21日GBPJPY1"に変更する。 もし、 "22年8月21日GBPJPY" も "22年8月21日GBPJPY1" もある場合は、 "22年8月21日GBPJPY2"に変更する。 これが期待の動作であれば、 後記のようにすればいいと思います。 '*************************************************************************************************** '* 処理名 :Worksheet_Change '* 機能 :「ワークシートのセル変更」イベント '*************************************************************************************************** Private Sub Worksheet_Change(ByVal Target As Range) ' A1セルが変更されたら If Intersect(Target, Range("$A$1")) Is Nothing Then ' A1セルの文字列をシート名に変更 ActiveSheet.Name = GetNewName(ActiveSheet.Range("$A$1")) 'ここを修正 ' 他と同じシート名だったら...シート名に(連番)をつける ActiveSheet.Move after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) End If End Sub '----------------------------------------<< End of Source >>---------------------------------------- '以下を追加 Function GetNewName(BaseName As String) As String Dim ShCount As Long Dim TempName As String Dim NameCnt As Long Dim i As Long Dim FinFlg As Boolean With ThisWorkbook TempName = BaseName NameCnt = 0 ShCount = .Sheets.Count Do FinFlg = True For i = 1 To ShCount If ThisWorkbook.Sheets(i).Name = TempName Then NameCnt = NameCnt + 1 TempName = BaseName & Format(NameCnt, "0") FinFlg = False End If Next i If FinFlg = True Then Exit Do Loop End With GetNewName = TempName End Function
関連するQ&A
- エクセルVBAでCSVを読み込んで別ファイルにまとめたいです。
エクセルVBA初心者の者です。 マクロの記録でできたコードをいじって、 なんとか動くものができるレベルです。 Aというフォルダに20~40行程度の内容のCSVファイルが 数百個あります。開けてみないと何行あるのかわかりません。 そのAフォルダのCSVの内容をエクセルで開いて、別のエクセルファイルの一枚のシートにまとめたいのです。 最初にCSVファイル名を一枚のシートのA列に書き出すところ まではやれたのですが、それを順番に読み込んでコピペの 流れができません。 CSVファイル名読み込み 読み込んだファイル1つめCSV開く CSVの20~40行をコピー 別のエクセルファイルのシートに貼り付け 1つめCSV閉じる ↓ 読み込んだファイル2つめCSV開く 繰り返し こういうやり方じゃない方がいいのかもわかりません。 もしかして考え方も違うのでしょうか? サンプルコード教えていただけるとありがたいです。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excel2007で2003のVBAが実行時エラー1004
普段は事務員の非プログラマーです。 Excel2000,2003で動いていたマクロを2007でも動くようにしてほしいと言われて頑張っているのですが、どうすればいいのか見当がつきません(*_*) どうぞ知識者の皆様のお知恵をお貸しください。 Excel2003で読み取りのみのVBAのファイルで、ボタンを押すとマクロが実行され、別CSVファイルを指定しVBAのファイルの別シートとして読み込みます。次に別txtファイルを指定してVBAのファイルの別シートに読み込みます。最後にその2つのシートの必要な個所のみ結合して、新しいcsvファイルとして保存する処理をしています。 Excel2007でこれを実行すると、csvファイルを読み込むときに次のようなエラーがでます。 「実行時エラー'1004':移動先またはコピー先のブックの行列数が元のブックの行列数よりも少ないため、シートを移動先またはコピー先のブックに挿入できません。データを別のブックに移動またはコピーするには、データを選択して、[コピー]コマンドと[貼り付け]コマンドを使用して移動先またはコピー先のブックのシートに挿入してください。 マクロの中身はこのような感じです。 エラーは最終行の「ActiveSheet~」ででています。 Sub openExcel() 'Step1 open excel Dim ExcelFileOpen As String ExcelFileOpen = Application.GetOpenFilename(FileFilter:="Excel Files,*.csv") If ExcelFileOpen <> "False" Then Workbooks.OpenText Filename:=ExcelFileOpen ActiveSheet.Move After:=Workbooks(ThisWorkbook.Name).Sheets(1) どうぞよろしくお願いいたします(_ _)
- ベストアンサー
- Visual Basic
- シート名を変更してもVBAでエラーにならないように
VBA初心者です。 VBAで複数のシートを選択するという動作を行う時、シート名を変更するとエラーになってしまうのですが、どうすれば回避できるのでしょうか?オブジェクト名?が使用できるらしいのですが、エラーになってうまく動作しません。指定の仕方を変える必要があるのでしょうか? 例えば、 Sheets(Array("第1週", "第2週", "第3週", "第4週", "第5週")).Select Sheets("第1週").Activate と記述してあって、シート名の"第1週"を"9月1日"とかに変更したら、当然エラーになりますが、 左のプロジェクトエクスプローラにある、Sheet1(第1週)の名前の変わらないオブジェクト名"Sheet1"の方で指定したいと思うのですが、単純に名前を置き換えても動作しません。どのように指定すればよいのでしょうか?
- ベストアンサー
- Excel(エクセル)
- Excelで日付入力用カレンダーを作るには
お世話になります。 従来のファイル(Excel 2007)を Office 2010 の環境で開くと、マクロで作成した「日付入力用のカレンダー」が表示できませんでした。 このパソコンに Access 2007 をインストールしました。 その結果、このファイルは正常にカレンダーを表示し、日付を入力できるようになりました。 Excel 2010 の新規ファイルに、従来のファイルの VBA をコピーして、貼り付けました。 ところが、この新規ファイルでは、カレンダーを表示できず、別添のようなメッセージが表示されます。 この原因を教えていただければ有難いです。 なお、そのVBA は次のようなものです。 [各ワークシート] Option Explicit Sub カレンダーON() ActiveSheet.Calendar1.Visible = True End Sub Sub カレンダーOFF() ActiveSheet.Calendar1.Visible = False End Sub [標準モジュール] Option Explicit Private Sub Calendar1_DblClick() ActiveSheet.Range("A3", "C3") = Calendar1.Value End Sub よろしくお願いします。
- ベストアンサー
- Excel(エクセル)
- VBAでのエラーです・・。
最近VBAマクロを本を片手に勉強しています。シートを選択するVBAを作っていて次のような記述ができないのか考えています。 dim A as String A = "sheet2,sheet3" Sheets(Array(A)).select とやると、Arrayの行で「インデックスが・・・」というエラーで落ちます。Arrayを変数で指定することができないのですが・・。なにか記述に問題があるのでしょうか?(変数Aに"sheet2", "sheet3"と値が入るようにしても結果はNGでした・・。) 宜しくお願いします。
- 締切済み
- オフィス系ソフト
- Excel VBAでコピー後のワードアート?の名前変更
丸1日以上悩みましたが、解決できないのでご相談させていただきます。 Excel2007です。 複数のワードアートを作成しています。 個々を判別できるよう以下のように名前ボックスで名前をつけています。 内容は、数式バーを「 =商品データ!D2 」として別の入力用シートの値をそれぞれ表示させています。 商品名001 値段001 コメント001 これを、VBAで同一シートの別場所へコピーしたところ、商品名001のワードアートが2つという状態になってしまい、思うように処理ができません。 (数式バーの書き換えもまだ、考えていませんが・・・) (対象データの数だけループさせたいと考えています) ==== コピー元の 価格001 が 価格002 になった。2つ目は変化なし === ActiveSheet.Shapes("価格001").Name = "価格002" コピー完了後は、名前を変更したいワードアートがアクティブなのだと思うのですが、アクティブなワードアートの名前を変更するには、どうすればよいのでしょうか? 参考までに、以下のようなことをしています。 === ActiveSheet.Shapes("価格001").Select 'コピー元を選択 Selection.Copy 'コピー Range("Z13").Select '貼り付け先指定(横へ移動) ActiveSheet.Paste '貼り付け
- ベストアンサー
- その他MS Office製品
- VBA 別ファイルの空白行を探す
すみません、よろしくお願いいたします。 <前提> Aファイル・・貼り付け元(マクロを組み込んでいるのはこちら) xファイル・・貼り付け先(ファイル名が一定ではない・シートは1つでシート名は固定) <質問内容> Aファイル、xファイルともに開き、 AファイルのデータをxファイルのA:B列(結合している)の空白行へ 貼り付けという作業をしたいと思っています。 xファイルの名前がかわってしまうので、 どちらのファイルも開いていて、 この二つのファイル以外は開いていないという前提で、 Windows(2).Activate でxファイルを指定するところまではできたのですが、 (教えてgooで教えていただきました) xファイルのA:B列の空白行を探して貼り付けというのを どうVBAで記述したらいいのかわかりません。 すみませんが、わかるかたお願いいたします。
- ベストアンサー
- その他MS Office製品
- 【EXCEL2007】VBAで変数に代入したい
アクセスありがとうございます。 VBA勉強中です。 新しいシートを複数挿入して、そのシート名を指定のものにしたいのですが そのシート名を一括で指定できないでしょうか? たとえば、"北海道","青森","秋田"...と47都道府県でシートを新規作成するとして for i =1 to 47 変数A=("北海道","青森","秋田"...,"沖縄") Worksheets.Add ActiveSheet.Name = 変数A next i のような感じで指定できないでしょうか? 上の文はトンチンカンかもしれないんですが…^^; よくやる作業なので、なんとか簡略化できないかなと思い、 検索してみましたが、検索ワードが悪いのか、まったく出てきませんでした。 どうぞ、よろしくご教授くださいませ…!!!
- ベストアンサー
- オフィス系ソフト
- EXCEL2010 VBA 指定した数だけシートを
EXCEL2010でVBAを使用して指定した数だけワークシートを作成したいと思います。 シートA11に入力してある数を確認してその数だけシートを作成します。 作成したシート名は○1・○2という風に文字に数を増やしていきます。 指定した数だけシートを作成したらもう一度この処理を行います。 ただしシート名は×1・×2~という風に違う名前で作ります。 (例) A11の値は5 シート ○1・○2・○3・○4・○5 と シート ×1・×2・×3・×4・×5 の計10個のシートを作成する。 ○と×のシートを指定数だけ作成する。 説明が下手で分かりにくいかもしれませんが上記の方法を教えてください。よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- エクセルVBAで画像を貼り付ける座標設定方法は?
Sheets("Sheet1")に貼り付けたJ-pegの画像(=シンボルマーク)を別なシートに貼り付けるのは下記のVBAで出来ました。ただ、これでは貼り付け先のシートのセルK12が、貼り付け元のK12と同じ位置でないと思った場所に張り付きません。 そこでセルで場所を指定するのではなく、座標のようなもので指定する方法はないものかと考えた次第です。 オートシェイプなどは座標指定で作成できるのですが、J-pegのような画像はどうすればいいのでしょうか? Sub TEST() Sheets("FACE").Shapes("シンボルマーク").Copy ActiveSheet.Range("K12").Select ActiveSheet.Paste End Sub
- ベストアンサー
- オフィス系ソフト