VBAでシート名の定義を変更する方法

このQ&Aのポイント
  • VBAを使用して、セルに日付情報を含んだシート名を定義する方法について教えてください。
  • VBAでセルに日付情報を含んだ連続したシート名を定義するためのスマートなコーディング方法を教えてください。
  • VBAを使用して、for~Next文を使って連続したセルにシート名を定義する方法を教えてください。
回答を見る
  • ベストアンサー

VBAでシート名の定義を変更したいのですが

VBAである規則性があるコードがあるのですがうまく出来ません。どなたかお願いします。 Worksheet("test" & TY).Cells(15, 6).name ="DD" & TY & "0101" Worksheet("test" & TY).Cells(16, 6).name ="DD" & TY & "0102" Worksheet("test" & TY).Cells(17, 6).name ="DD" & TY & "0103" Worksheet("test" & TY).Cells(18, 6).name ="DD" & TY & "0104" Worksheet("test" & TY).Cells(19, 6).name ="DD" & TY & "0105" ・ ・ ・ ・ ・ かなり似通っているのでfor~Nextでいけると思うのですが・・・ ここにあるのはあくまで一部なのでもっといっぱいあります。 どうスマートなコーディングをしたらいいか迷っています。 最後の0101とかは日付に近い形にしたいのですがここをどうループさせたらいいか迷っています。 フォーマットの関係で出来るだけ日付型は避けたいです。連続でセルに名前をふりたいのでお願いします。

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

  • ベストアンサー
回答No.2

> Worksheet("test" & TY).Cells(15, 6).name ="DD" & TY & "0101" > Worksheet("test" & TY).Cells(16, 6).name ="DD" & TY & "0102" > Worksheet("test" & TY).Cells(17, 6).name ="DD" & TY & "0103" > Worksheet("test" & TY).Cells(18, 6).name ="DD" & TY & "0104" > Worksheet("test" & TY).Cells(19, 6).name ="DD" & TY & "0105" この部分だけをForで回すとしたら、 For I=1 to 5  Worksheet("test" & TY).Cells(I+14, 6).name ="DD" & TY & & format(I+100,"0000") Next I さて、これがスマートかどうかは、その人のセンスによります。 ではでは

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

>VBAでシート名の定義を変更したいのですが しかし、質問のコード例では、セル(の安易)に名前をつけているのでは。 === 私の経験はたいしたことはないが、質問や回答を6-7年見てきて、セルに軒並みなまえをつける例を記憶にない。 定義して、その後コーディング上すっきりするとかの、目算はあるのですか。 === コード例ではどこが変化すつところかな。 それが伝わらない(例だけでは意図は文章にしないと伝わりにくい)のだ ●>Cells(15, 6の15 は変化させるのだろうが ●後は"0101"の部分だけか? >日付に近い形にしたいのですがここをどう 近いなんてあいまいな書き方はどういうことを意味するのか。 0101-0102-・・・-0131-0201-・・・0229ー00301-0302・・と暦の年月をくっつけばよいのか。 == >いっぱいあります test,TY,DDは変わらないのだな。 まさかDDは日付でないでしょうね。紛らわしい。

関連するQ&A

  • ワークシート上のセルの値を変更したらVBAを実行させる。

    Excelでシートの任意の箇所(FORM)を変更したらVBAを走らせたいのですがやり方がわかりません。 シート上の任意の箇所に「FORM」という名前をつけました。 その中でセルの値を変更したらVBAを走らせるために、以下のテストを作成しました。 ですが、入力したセルの値は消えて、さらに無限ループのようにいくつも値をみて、メッセージボックスも複数表示されます。 実際は無限ループではないので、フリーズはせずかえってくるのですが。 どのように変更したらいいのでしょうか? Private Sub Worksheet_Change(ByVal TARGET As Range) TARGET = Range("FORM") MsgBox Range("条件1") End Sub

  • VBA:日付をシリアル値にできるの関数教えてください。

    VBAにより、あるセルに"yyyy / mm / dd hh:mm:ss"のフォーマットで日付を記入しました。それを手動で書式を標準にすると例えばシリアル値38148.4768981481になります。これをVBA上でできる関数を知りたいです。つまり、日付をシリアル値にできるVBAの関数を教えて頂きたいです。宜しくお願いいたします。

  • EXCEL VBA シートをコピーする時にエラーが発生してしまう件

    EXCEL VBAでシートをコピーするマクロを作成しているのですが、【10】にて時々エラーが発生してしまいます。100シート分ぐらいをコピーしたいのですが、途中で30シートぐらいの所で止まってしまいます。 (シートが10前後だと問題なく処理が終ります) 止まってしまうシートはまちまちなので、 シート名称が問題だとは考えにくいです。 ちなみに【8】でのsheets_nameは取得できてます。 前後に何かを入れることにより解決するのか、 ソース本体をいじれば解決するのか、 詳しい方、何卒、解決方法を ご指導いただけますよう宜しくお願いします。 【1】 '取得した配列の数だけループを行う。 【2】 For i = LBound(test) To 配列数 - 1 【3】 【4】 列番号 = Mid(test(i), 4, 3) 【5】 Debug.Print "test(" & i; ") : " & test(i) 【6】 【7】 'FORMATシートをコピーし、その名称を変数名にする 【8】 sheets_name = Worksheets("実績").Cells(18, 列番号).Value 【9】 【10】 Worksheets("FORMAT").Copy After:=Sheets("FORMAT") 【11】 【12】 ActiveSheet.Name = (sheets_name) 【13】 Cells(4, 3) = (sheets_name)

  • エクセルのシート名変更で重複した時のvbaの処理

    こんにちは。vba初心者です。 セルのA1を参照してシート名を変更するとき 名前が重複したら、A1に入力されている文字列の後に(2)とつけたいのですが、 その重複したときの処理ができません。 シート名を変更するところまではできました。 以下のvbaです。 Sub test() Dim aSheet As Worksheet For Each aSheet In Worksheets aSheet.Select aSheet.Name = Range("A1") On Error Resume Next Next aSheet End Sub これに付け加えるか全然違ってもかまいません。 何かよい方法を教えてください。 説明が不十分かもしれませんが、よろしくお願いします。

  • VBAでエクセルをシート名を気にせず読み込むには?

    ACCESS2000のVBAでエクセルを読んでいるプログラムを作成しています。 今までは、その受け取っているエクセルのシート名が固定だったのですが、次回からシート名が可変になります。そこで相談なのですが、シート名が可変でも読み込む方法はありますか。ちなみにシートは1つです。(インポート以外でお願いします。) 現在のコーディング例 一部抜粋 Dim wb As Workbook 'ワークブック Dim ws As Worksheet 'シート 'マスタのExcelファイルを開く Set wb = Workbooks.Open("test") Set ws = wb.Worksheets("SHEET1") <=ここが可変になります。 i = 0 Do Until IsEmpty(ws.Cells(StartRow + i, StoreNoCol)) nohindate = ws.Cells(StartRow + i, 2) '日 i = i + 1 Loop 宜しくお願いします。

  • VBAにて実行時エラー’1004’:「アプリケーション定義又はオブジェクト定義のエラー」発生?

    VBA初心者です。Xp,Excel2000を使用しています。 シフト者のカレンダー作成しており、動作していたVBAのコピーを利用しています。 何回かループを回った後表記エラーとなります。アドバイスをお願いいたします。   A B C D E -------------------------- 1 2 3 4 ...... <-- 日付 2 2 0 1 ...... <-- シフト(ln_1の範囲名) 7 8 9 10 ...... <-- 日付 1 0 3 3 ..... <-- シフト(ln_2の範囲名) .................... For i = 1 To 6   <-- 最大6週にわたる Set r = Range("ln_" & LTrim$(Str$(i))) cpos = r.Column rpos = r.Row For n = 1 To r.Columns.Count With Cells(rpos - 1, cpos + n - 1) m = .Characters.Count <-- 数回ループ後ここでエラーとなる! s = Cells(rpos, cpos + n - 1) <-- シフト情報 Select Case s Case ""    '- Blank - ........ 日付セルの装飾 Case "0" '- Holiday - ......... 日付セルの装飾 Case "1" '- shift1 - ........... 日付セルの装飾

  • VBA NAME定義使用方法

    こんにちは あるサンプルを元に下記を作ったのですが、 .Worksheet.Cells(ia, 0) = 1 の部分で、1セルのみに値を入れたいのですが、 1004エラーが発生してしまいうまく動かすことが出来ません .Offset(ia, 0).Value = 1 とすれば値が入るのですが、strName1の名前定義範囲で A1~B1と2セルを指定しているので .Offsetだと二列に同じ値が入ってしまいました。 これを一列のみの値をいれる方法はないでしょうか。 Dim objName As Name For ib = 0 To UBound(M_Sheetdy) - 1 Set objName = ActiveWorkbook.Names(strName1) With objName.RefersToRange .Worksheet.Range(strName1).Clear For Each M_Member In vntMembers .Worksheet.Cells(ia, 0) = 1 .Worksheet.Cells(ia, 1) = 2 ia = ia + 1 Next M_Member End With Next

  • VBAに詳しい方に質問です。

    VBAに詳しい方に質問です。 私はVBA初心者です、お力添えのほどよろしくお願いいたします。 エクセルで入力し、それを一覧表に転記し、最終的に出力フォームにデータを呼び出し印刷するプログラムを作成しています。 1つの項目のデータを表に転記したり、呼び出すVBAはなんとか作成できました。 しかし、複数のセルのデータを表に転記するVBAが作ることができません。 ☆シート1 入力フォームがあり、 氏名・電話番号・住所等の項目を100人ほど表で入力します。 それらをシート2へ転記します。    1     2      3    4…   1  日付    名前    年齢   電話番号 2 2010/07/01 石川花子   12才  090-×× 3 4  ↓以下100名ほど入力 5  ※列も行も数値で表すように設定してあります。 ・ ・ ・ ☆シート2 これまでに入力したデータをすべて一覧表にします。 シート1のデータはこれまでに入力されたデータの下に転記されます。    1     2     3   4… 1 日付    名前    年齢  電話番号 902010/06/28 山田太郎  33才 090-×× 912010/07/01 石川花子   12才  090-××   92  ↑このように日付欄に空白を見つけ、そこからデータを転記する。 93 ・ ・ ・ 私が考えたVBAは、 sub 転記マクロ() set 入力 = worksheet("シート1") set 一覧 = worksheet("シート2") 日付1=入力.cells(2,1) 名前1=入力.cells(2,2) 年齢1=入力.cells(2,3) 電話1=入力.cells(2,4) 日付2=入力.cells(3,1) 名前2=入力.cells(3,2) 年齢2=入力.cells(3,3) 電話2=入力.cells(3,4) '以下○○100まで ※一覧.(縦,2)に縦+1をしていき""の場所を探す。 (すみません、データを会社に置いてきたので表記の仕方を忘れてしまいました^^;) 一覧.(縦,1)=日付1 一覧.(縦,2)=名前1 一覧.(縦,3)=年齢1 一覧.(縦,4)=電話1 一覧.(縦+1,1)=日付2 一覧.(縦+1,2)=名前2 一覧.(縦+1,3)=年齢2 一覧.(縦+1,4)=電話2 '以下+100まで end sub 何も見ずに思い出しながら書いたので、もしかしたらどこか間違っているかもしれませんが、 このような感じで書いていきました。 さすがにこのようなことを100回繰り返すのは大変なので、for next関数でなんとかならないか試行錯誤したのですがなかなか解明できず困っています。 詳しい方、どうか教えてください。

  • VBAで

    VBAで Sub test() '日付から曜日を取得 WEEKDAY(A2) Dim i As Integer For i = 3 To 20 Cells(i, 2) = Weekday(Cells(i, 1)) Next End Sub 横のセルを参照する場合は、上記のようになると思いますが、上のセルを参照するにはどのようにすればいいでしょうか? 例えばA1~T1セルを参照して、A2~T2に反映させると言った具合です。よろしくお願いします。

  • excel 日付で、0時が読み出せない

    エクセルのセルにyyyy/mm/dd hh:mm:ssの形式で日付と時間を入れている。これを エクセルVBAで Dim W as String W=Cells() で読み出したとき、0時の場合、Wには時間以降が無くなっている。 日付のフォーマットはこのままで、0時の時も0:00:00の部分が読み出せないでしょうか。 なお、Cells().Valueとしても同じです。 また、日付以外のデータも読み込む可能性が有ります。

専門家に質問してみよう