[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『「賞状をつくりたいです。」[ヨッシー] について』(ヨッシー)
投稿
[[20190728054346]] 『賞状をつくりたいです。』(ヨッシー)
について...
隠居じーさんさん、もう一度質問させてください。
教えていただいたコードで賞状をプレビューさせて作ることができました。
それで、プレビューではなくて、次のようにコードを少し変更して、2人ずつの賞状をシートとして次々とできるようにしてみました。
Sub OneInstance()
Dim i As Long
Dim Buf As Variant
Dim MsgBV As Variant
MsgBV = MsgBox("漢字=OK ひらがな=NO", vbYesNo)
With Worksheets("家庭学習名簿")
Buf = .Cells(1).CurrentRegion
End With
With Worksheets("家庭学習")
.Range("I14,AW14,J11,AX11") = ""
For i = LBound(Buf, 1) To UBound(Buf, 1) Step 2
.Range("I14") = Buf(i, 3)
If MsgBV = vbYes Then .Range("J11") = Buf(i, 1)
If MsgBV = vbNo Then .Range("J11") = Buf(i, 2)
If i + 1 > UBound(Buf, 1) Then
Worksheets("家庭学習").Copy after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = Buf(i, 1).Value
Exit For
End If
If MsgBV = vbYes Then .Range("AX11") = Buf(i + 1, 1)
If MsgBV = vbNo Then .Range("AX11") = Buf(i + 1, 2)
.Range("AW14") = Buf(i + 1, 3)
Worksheets("家庭学習").Copy after:=Worksheets(Worksheets.Count)
.Range("I14,AW14,J11,AX11") = ""
Next
End With
Erase Buf
End Sub
まず、これで正しいですか。それと、シートが人数分できたのですが、シート名を「名前A・名前B」というようにするには、どう直したらいいでしょうか。
< 使用 Excel:Office365、使用 OS:unknown >
こんにちは ^^ 賞状を保存されるのですね。。。 まず、ご提示のコードはエラーで動きません。 Worksheets(Worksheets.Count).Name = Buf(i, 1).Value Buf(i,1)はレンジオブジェクトではありませんので、後ろに.Valueを つけられても、意味はないかと、それを修正して、最後だけでなく 途中も名前を付ければよいですよ。ちょっといまたてこんでまして のちほどアップしておきます。m(_ _)m (隠居じーさん) 2019/08/13(火) 12:58
こんにちは ^^ お待たせいたしました。修正してみました。 わたしが作ったコードでも、リンクは設定した方が良いですが、 名前指定で、質問はされないほうがお得ですよ。。。
↑理由。。。わたしが死んだふりしてても,ご親切な、どなたかが、( ̄▽ ̄) 回答して下さる可能性が多大です ← 多分 ^^;;;。。。。m(_ _)m
Option Explicit
Sub OneInstanceYoshiSan()
Dim i As Long
Dim Buf As Variant
Dim MsgBV As Variant
MsgBV = MsgBox("漢字=OK ひらがな=NO", vbYesNo)
With Worksheets("家庭学習名簿")
Buf = .Cells(1).CurrentRegion
End With
With Worksheets("家庭学習")
.Range("I14,AW14,J11,AX11") = ""
For i = LBound(Buf, 1) To UBound(Buf, 1) Step 2
.Range("I14") = Buf(i, 3)
If MsgBV = vbYes Then .Range("J11") = Buf(i, 1)
If MsgBV = vbNo Then .Range("J11") = Buf(i, 2)
If i + 1 > UBound(Buf, 1) Then
Worksheets("家庭学習").Copy after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = Buf(i, 1)
Exit For
End If
If MsgBV = vbYes Then .Range("AX11") = Buf(i + 1, 1)
If MsgBV = vbNo Then .Range("AX11") = Buf(i + 1, 2)
.Range("AW14") = Buf(i + 1, 3)
Worksheets("家庭学習").Copy after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = Buf(i, 1) & "・" & Buf(i + 1, 1)
.Range("I14,AW14,J11,AX11") = ""
Next
End With
Erase Buf
End Sub
(隠居じーさん) 2019/08/13(火) 14:00
(ヨッシー) 2019/08/13(火) 15:55
■1
>まず、これで正しいですか。
正しいかどうか(ちゃんと動くか)の検証は、デバッグ作業そのものですから、本来ご自身で行うべきだとおもいます。
■2
値を書き換えてからコピーするより、
ひな形をコピーしてから値を書き込むと考えた方が、いちいち値を消さなくて良い分ちょこっとだけ高速だったりするような気がします。
■3
処理する人数が奇数だった場合を考えておいた方が良い気がします。
■3
配列を取り込んで処理することを否定するものではないですが、混乱してしまいそうなときは、あえてセル範囲として考えてみるのもアリかなとおもいます。
■4
踏まえた別案。
Sub OneInstance_別案()
Dim srcRNG As Range
Dim i As Long
Dim 列 As Long
Stop 'ブレークポイントのかわり
Set srcRNG = Worksheets("家庭学習名簿").Cells(1).CurrentRegion
'モードを指定
If MsgBox("漢字=OK ひらがな=NO", vbYesNo) = vbYes Then
列 = 1
Else
列 = 2
End If
'ループ処理
For i = 1 To srcRNG.Rows.Count Step 2
'▼【ブランクの】ひな形シートを末尾にコピー
Worksheets("家庭学習").Copy after:=Worksheets(Worksheets.Count)
'▼コピーして出来たシートを操作
With Worksheets(Worksheets.Count)
'▼一人目の転記
.Range("J11").Value = srcRNG.Cells(i, 列).Value
'▼二人目の転記(奇数人対策)
If i + 1 <= srcRNG.Rows.Count Then
.Range("AX11").Value = srcRNG.Cells(i + 1, 列).Value
End If
'なんかの処理
.Range("AW14").Value = srcRNG.Cells(i + 1, 3).Value
'▼シート名の処理(奇数人対策)
If .Range("AX11").Value <> "" Then
.Name = .Range("J11").Value & "・" & .Range("AX11").Value
Else
.Name = .Range("J11").Value
End If
End With
Next i
End Sub
(もこな2) 2019/08/13(火) 17:41
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.