氏名、火~土までそれぞれの希望曜日が入ってる名簿、から 氏名、希望曜日を新しい記録用紙に
転記していきたいです、
うまく入れ子にできず、コードが2つになってしまいました。
コードが別々でもよいのですが、
その場合記録用紙作成4()の方の インデックスを、jとしましたが、違うので動きません、
j をなんと表記したら、動きますか?
宜しくお願いします。
Sub 記録用紙作成3()
Dim 氏名 As Range
For Each 氏名 In Worksheets("名簿").Range("B2:B11,I2:I11")
Worksheets("記録用紙").Copy After:=Worksheets(Worksheets.Count)
With ActiveSheet
.Name = 氏名.Value
.Range("B1") = 氏名.Value
End With
Next 氏名
End Sub
Sub 記録用紙作成4()
Dim 曜日 As Range
Dim j As Integer
For j = 4 To 20
For Each 曜日 In Worksheets("名簿").Range("D2:H11,K2:O11")
If Worksheets("名簿").Range("D2") = "火" Then
Worksheets(j).Range("D1") = "〇"
If Worksheets("名簿").Range("E2") = "水" Then
Worksheets(j).Range("E2") = "〇"
If Worksheets("名簿").Range("F2") = "木" Then
Worksheets(j).Range("F2") = "〇"
If Worksheets("名簿").Range("G2") = "金" Then
Worksheets(j).Range("G2") = "〇"
If Worksheets("名簿").Range("H2") = "土" Then
Worksheets(j).Range("H2") = "〇"
End If
End If
End If
End If
End If
j = j + 1
Next 曜日
Next
End Sub
No.5ベストアンサー
- 回答日時:
以下のようにしてください。
Sub 記録用紙作成3のI2:I11は、画像が正しいと判断し、J2:J11としています。
Sub 記録用紙作成4のK2:O11は、画像が正しいと判断しL2:P11としています。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
Sub 記録用紙作成3()
Dim 氏名 As Range
For Each 氏名 In Worksheets("名簿").Range("B2:B11,J2:J11") '変更
Worksheets("記録用紙").Copy After:=Worksheets(Worksheets.Count)
With ActiveSheet
.Name = 氏名.Value
.Range("B1") = 氏名.Value
End With
Next 氏名
End Sub
Sub 記録用紙作成4()
Dim 氏名 As Range
Dim sheet_name As String
Dim wx As Long
Dim 曜日 As Variant
曜日 = Array("火", "水", "木", "金", "土")
For Each 氏名 In Worksheets("名簿").Range("B2:B11,J2:J11")
sheet_name = 氏名.Value
For wx = 0 To 4
If 氏名.Offset(, 2 + wx).Value = 曜日(wx) Then
Worksheets(sheet_name).Range("D2").Offset(, wx).Value = "○"
End If
Next
Next 氏名
End Sub
No.13
- 回答日時:
No.10とNo.12を足して。
Sub try_2()
Dim sh As Shape
Dim r As Range
Dim i As Integer
For Each r In Worksheets("名簿").Range("B2:B11,J2:J11")
Worksheets("記録用紙").Copy After:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = r.Value
With Worksheets(r.Value)
.Range("B1").Value = r.Value
For i = 1 To 5
with .Range("D1:H1").Cells(1, i)
If r.Range("C1:G1").Cells(1, i).Value = .Value Then
Set sh = .Shapes.AddShape(msoShapeOval, .Left, .Top, .Width, .Height)
sh.Fill.Visible = msoFalse
set sh = nothing
end with
Next
End With
.range("A1").select
Next
End Sub
こんな感じでしょうかね?
検証はしてませんけど。
>.AddShape(msoShapeOval, .Left, .Top, .Width, .Height)
ここの図形の位置及びサイズについては質問者さん側で調整して頂くしかないかと。
No.12
- 回答日時:
既に放置されているかもですが、『各記録用紙の該当セル値を"●"にする』って事なら、
Sub try()
Dim ws As Worksheet
Dim r As Range
Dim i As Integer
Set ws = Worksheets("名簿")
For Each r In ws.Range("B2:B11,J2:J11")
Worksheets("記録用紙").Copy After:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = r.Value
With Worksheets(r.Value)
.Range("B1").Value = r.Value
For i = 1 To 5
If r.Range("C1:G1").Cells(1, i).Value <> "" Then .Range("D1:H1").Cells(1, i).Value = "●"
Next
End With
Next
Set ws = Nothing
End Sub
これでも出来ましたよ。
No.11
- 回答日時:
既に他で解決されてるなら読み飛ばして下さい。
ストレス発散には良いかもです。
先の○をつける方法は文字は無関係でセルのサイズに合わせてます。
これを文字のサイズ(○囲い)にするのなら、図形の位置と大きさを微調整する必要があるでしょうね。
そこは情報にはない(行列のサイズや文字のサイズとか)のでこちらでは厳しいかも?
と『永遠の』初級者は思います。
No.10
- 回答日時:
仮にですが。
・セルが真四角になるよう調整済み
・セルの値は中央に来るよう設定済み
・D2~H2の全てに〇をつける
のなら、
Dim r As Range
Dim sh As Shape
For Each r In Range("D2:H2")
With r
Set sh = ActiveSheet.Shapes.AddShape(msoShapeOval, .Left, .Top, .Width, .Height)
sh.Fill.Visible = msoFalse
End With
Next
こんなのでも出来ます。
あとは〇を付けるかどうかの条件式が必要ですね。
⇒捕捉のコードのプロパティは何故半角スペースを挟んでいるのかがきにはなりますけど。
No.9
- 回答日時:
記録用紙のセル番地が不明ですけど、曜日に事前に付けた〇の図形は選択するとその外側に□があると思いましたけど、これが目的のセル領域をはみ出さない事が条件。
あとは名簿でD~H列の値のない所については コピーした記録用紙のセル&図形にある .Leftプロパティを用いて判別し削除するとかかな?
10年程前に見かけた質問の回答ではそんな感じでしたね。
No.8
- 回答日時:
検証できないので回答も意味ないのでしょけど。
○を図形でつけるのに失敗しているならそのコードを提示されてみるのも勉強です
またその数が増えることでの不具合は、古いバージョンなら経験はありました
今のが何百まで平気なのかは不明です
それとシートを振り分ける作業が一度きりなら、逆に雛形に全部付けておいてコピペ後に不要な箇所を消してしまうのも、ありなのではないかな?
と初級者は思いました
あくまで脳内妄想ですけど
No.4
- 回答日時:
『名簿』に同じ『氏名』が重複して書かれていないのなら、初級レベルでは入れ子の必要性はないと妄想しております。
結局D2~H2に『値があるか否か』で振り分け『値のあるセルを置換で”〇”としてしまう』ように脳内では思い浮かびますがその検証が・・・・。
なので、あとはベテラン回答者様に。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
【Excel】指定したセルの名前で...
-
ExcelVBAを使って、値...
-
Excelで指定した日付から過去の...
-
EXCELで変数をペーストしたい
-
Excel vbaで特定の文字以外が入...
-
i=cells(Rows.Count, 1)とi=cel...
-
ExcelのVBAで数字と文字列をマ...
-
【VBA】指定したセルと同じ値で...
-
特定の文字を条件に行挿入とそ...
-
セル色なしの行一括削除
-
VBA実行後に元のセルに戻りたい
-
【VBA】シート上の複数のチェッ...
-
指定した条件で範囲選択したい
-
Excel VBA、 別ブックの最終行...
-
EXCELのVBA-フィルタ抽出後の...
-
実行時エラー438 オブジェクト...
-
先頭と末尾を指定して連続した...
-
EXCEL VBA 画面のロックについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel VBA】指定行以降をクリ...
-
Excelで指定した日付から過去の...
-
【Excel】指定したセルの名前で...
-
Excel vbaで特定の文字以外が入...
-
特定の文字を条件に行挿入とそ...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
Excelのプルダウンで2列分の情...
-
EXCELで変数をペーストしたい
-
連続する複数のセル値がすべて0...
-
Excel VBA、 別ブックの最終行...
-
VBAを使用した時間管理
-
エクセルVBAでコピーして順...
-
セル色なしの行一括削除
-
【EXCEL VBA】Range("A:A").Fi...
-
VBA コピーして次の値まで貼り...
-
VBA初心者です。結合セルを保持...
おすすめ情報
下方に名簿をつけました。
記録用紙のひな型をコピー、新Sheetを作成し、名簿からfor each next で先程、コピーした
Sheetのインデックスと 、上方部へ 名簿の氏名を転記、また上方部の右並びに 火 水 木 金 土 があるので名簿と同じ曜日に〇が付くようにしたいのです。
記録用紙(上方部)
氏名 様 火 水 木 金 土
名簿
tatsumaru77さん、丁寧にレスありがとうございます。
offset を使うんですね。とても参考になります。
もう1ケ所教えていただきたいのですが、記録用紙に〇をつけるのは曜日を〇で囲みたいということです 例㋕ の様にです。
ググって Shapes.AddShape(msoShapeOval, wx .Left, wx .Top, wx .Width, wx .Height)
入れてみましたが、動きませんでした。
宜しくお願いします。