プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になります。

OSはwin11、エクセルはoffice365です。

下記の参考コードでは、
  B列には No
C列には シート名です
   シート数は46シートです。

この数だとデイプレーからはみ出すため、
見易くするために下記のように2列に分けたいです。

 B列には No 0~24  range(B2:B26)
C列には 26シート range(C2:C26)

D列には No 25~50 range(D2:D26)
E列には 24シート(余りは余裕に) range(E2:E26)

ご教授よろしくお願いいたします。

参考
Sub 目次作成()
Dim no As Integer
no = 2
Dim wsMain, ws As Worksheet
Set wsMain = Worksheets("8目次")
For Each ws In Worksheets
If ws.Name <> wsMain.Name Then
wsMain.Hyperlinks.Add _
Anchor:=wsMain.Cells(no, "C"), _
Address:="", _
SubAddress:=ws.Name & "!A1", _
TextToDisplay:=ws.Name
wsMain.Cells(no, "B").Value = no - 2
no = no + 1
End If
Next ws
End Sub

質問者からの補足コメント

  • どう思う?

    ご指導を頂いたコードを挿入し下記します。

    実行すると

    1 このコード部か赤く表示される
    wsMain.Hyperlinks.Add _
    Anchor:=wsMain.Cells(no-25, "E"), _ ’E列の25減した行へ
    Address:="", _
    SubAddress:=ws.Name & "!A1", _
    TextToDisplay:=ws.Name

    2 青く反転し コンパイルエラー 構文エラー が表示される
    wsMain.Hyperlinks.Add _
    Anchor:=wsMain.Cells(no-25, "E"), _ ’E列の25減した行へ

    再度ご指導頂けませんか。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/04/24 10:48

A 回答 (5件)

こんにちは



方法はいろいろあります。

連番の no からセルの位置を計算することが可能です。
番号を記載するセル位置として、
 行番号 = (no Mod MaxR) + 2
 列番号 = (no \ MaxR) * 2 + 2  (MaxR は表示行数)
を用いれば可能です。

計算するのがややこしければ、記載する行番号、列番号を変数にしておいて、
 記載する毎に行番号を+1し、
 行番号がMax(ご質問の場合は26)を超えたら、列番号を+2、行番号を2に戻す
としてもできますね。


以下は、(行番号、列番号)を変数にする代わりに、記載するセル位置(=Range)を変数として同様に行う方法での例です。

Sub TableOfSheets()
Dim sh As Worksheet, rng As Range, n As Long
Const TS = "8目次" ' 目次シート名
Const MaxR = 26  ' 最大行番号

With Worksheets(TS)
Set rng = .Range("C2")
n = 0
For Each sh In Worksheets
If sh.Name <> TS Then
rng.Offset(, -1).Value = n
.Hyperlinks.Add Anchor:=rng, TextToDisplay:=sh.Name, _
     Address:="", SubAddress:=sh.Name & "!A1"
n = n + 1
Set rng = rng.Offset(1)
If rng.Row > MaxR Then Set rng = rng.Offset(1 - MaxR, 2)
End If
Next sh
End With
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
うまくできましした。
ご丁寧な解説まで頂き誠にありがとうございます。

お礼日時:2023/04/24 11:26

何でズラスのですか?



B列が25個なのに、C列は26個。
D列が26個なのに、E列は24個。
    • good
    • 0

No.1です。


失礼しました。
>Anchor:=wsMain.Cells(no-25, "E"), _ ’E列の25減した行へ
’以降はわかりやすいようにコメントとして追加していましたが、が(_:改行)の後には付けられませんね。
’~を削除してください。
追伸
プログラムには個性が出るので、なるだけ変更の無いようにするようにしています。
しかし、No.2さんのようにわかりやすい変数名を用いた方が変更が楽ですよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
うまくできましした。

お礼日時:2023/04/24 12:19

以下のようにしてください。


noは、0~45まで変化します。
wrow,wcolはnoに対応する、行番号、列番号です。

Sub 目次作成()
Dim no As Integer
Dim wrow As Long
Dim wcol As Long
no = 0
Dim wsMain, ws As Worksheet
Set wsMain = Worksheets("8目次")
For Each ws In Worksheets
If ws.name <> wsMain.name Then
If no < 25 Then
wrow = 2 + no
wcol = 2
Else
wrow = no - 23
wcol = 4
End If
wsMain.Hyperlinks.Add _
Anchor:=wsMain.Cells(wrow, wcol + 1), _
Address:="", _
SubAddress:=ws.name & "!A1", _
TextToDisplay:=ws.name
wsMain.Cells(wrow, wcol).Value = no
no = no + 1
End If
Next ws
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
うまくできましした。

お礼日時:2023/04/24 11:02

こんな感じかな?


・・・
If ws.Name <> wsMain.Name Then
If no<=26 then ’2列目にするかどうかの条件:1列目
wsMain.Hyperlinks.Add _
Anchor:=wsMain.Cells(no, "C"), _
Address:="", _
SubAddress:=ws.Name & "!A1", _
TextToDisplay:=ws.Name
wsMain.Cells(no, "B").Value = no - 2
Else ’2列目
wsMain.Hyperlinks.Add _
Anchor:=wsMain.Cells(no-25, "E"), _ ’E列の25減した行へ
Address:="", _
SubAddress:=ws.Name & "!A1", _
TextToDisplay:=ws.Name
wsMain.Cells(no, "D").Value = no - 2 ’D列へ表示
End IF
no = no + 1
End If
・・・
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!