Excel (VBA) |
![]() ![]() |
(Windows 10全般 : その他)
社員証を作成したいのですが・・・。
投稿日時: 22/03/14 00:04:33
投稿者: ruto0624
|
---|---|
エクセル2010です
|
![]() |
投稿日時: 22/03/14 08:34:53
投稿者: simple
|
---|---|
まずは、コードだけ示したデバッグ依頼は感心しません。
|
![]() |
投稿日時: 22/03/14 09:16:37
投稿者: WinArrow
|
---|---|
A4用紙に10件(レイアウト不明?)を印刷する
|
![]() |
投稿日時: 22/03/14 09:34:20
投稿者: Suzu
|
---|---|
「うまくいかない」は希望の動作と違う と言うだけで
rw = Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To rw If shtMeibo.Cells(i, 2) = Range("AM3").Value Then nafuda.Cells(j, 7) = Cells(i, 8) j = j + 13 End If Next i 'A4に10枚の名札をつくる MaxRow = shtMeibo.Cells(shtMeibo.Rows.Count, 1).End(xlUp).Row For Counter = 1 To MaxRow - 2 : Simei = shtMeibo.Cells(1 + Counter, 8).Value '氏名 この、rw と、MaxRow は同じ シート名簿 の最終データの行ですか? だとするなら、 『i』 と、『1 + Counter』は同じ値になる? 同じなら、別ループにしない方が判り易いです。 違うなら、 「1:」と関連しますが、同じ氏名者のデータを持ってきているのか確認しましょう。 4: If CounterforCard Mod 2 = 0 Then OffsetX = 10 の記載 もあるので、シート名札 は、横 2 x 縦5 の レイアウトなのでは? だとしたら、 OffsetX をその後で使わないとダメなのでは? 5: デバック は、まずご自分でしましょう。 VBE画面のコードをシングルステップで進め、各変数の値の中身をローカルウィンドで確認しながら 思った通りの変数が代入されているのか、確認を行ってください。 |
![]() |
投稿日時: 22/03/14 09:38:23
投稿者: simple
|
---|---|
コードを修正していくことはできるとは思いますが、
|
![]() |
投稿日時: 22/03/14 10:30:16
投稿者: どすん
|
---|---|
コードを読めば、何をしたいかは大体わかる。
Sub MakeCard改() Dim i As Long '名簿の行数のカウントアップ用 Dim j As Long '転記先の行数のカウントアップ用 Dim rw As Long '最終行取得用 Dim shtMeibo As Worksheet Dim nafuda As Worksheet Dim MaxRow As Long 'データの最終行取得 Dim tempWS As Worksheet '//// ひな形となるワークシートを追加 Dim SheetNameCnt As Long '社員各データ取り込む変数 Dim Simei As String '氏名 Dim Busho As String '部署 Dim HinsitsuMokuhyou As String '私の品質目標 Dim KankyouMokuhyou As String '私の環境目標 Dim Sikaku1 As String '資格表の左から Dim Sikaku2 As String Dim Sikaku3 As String Dim Sikaku4 As String Dim Sikaku5 As String Dim Sikaku6 As String Dim Sikaku7 As String Dim Sikaku8 As String Dim Sikaku9 As String 'ワークシート名簿をオブジェクト変数に Dim mokuhyou As Worksheet Dim sikaku As Worksheet Set shtMeibo = Worksheets("名簿") 'Set nafuda = Worksheets("名札") '不要 Set mokuhyou = Worksheets("目標") Set sikaku = Worksheets("資格") Set tempWS = Worksheets("temp") '//// ひな形となるワークシートを追加 shtMeibo.Activate If Range("AM3").Value = "" Then MsgBox "印刷したい所属を選択してください。", vbExclamation, "削除の確認" Exit Sub End If shtMeibo.Activate rw = Cells(Rows.Count, 1).End(xlUp).Row 'A4に10枚の名札をつくる MaxRow = shtMeibo.Cells(Rows.Count, 1).End(xlUp).Row SheetNameCnt = 1 For Counter = 1 To MaxRow - 2 '名簿のループ CounterforCard = Counter Mod 10 'CounterforCard=1,2,3,4,5,6,7,8,9,0,1,2,3... If CounterforCard = 1 Then Worksheets("名札").Copy After:=Worksheets(Worksheets.Count) ActiveSheet.Name = "名札" & SheetNameCnt Set nafuda = ActiveSheet SheetNameCnt = SheetNameCnt + 1 End If 'ひな形を初期化 tempWS.Range("G1") = "" tempWS.Range("D1") = "" tempWS.Range("A4") = "" tempWS.Range("A6") = "" tempWS.Range("B9") = "" tempWS.Range("C9") = "" tempWS.Range("D9") = "" tempWS.Range("E9") = "" tempWS.Range("G9") = "" tempWS.Range("I9") = "" tempWS.Range("K9") = "" tempWS.Range("N9") = "" tempWS.Range("P1") = "" 'リストから変数にデータを格納 Simei = shtMeibo.Cells(1 + Counter, 8).Value '氏名 Busho = shtMeibo.Cells(1 + Counter, 2).Value '部署 HinsitsuMokuhyou = mokuhyou.Cells(2 + Counter, 4).Value '私の品質目標 KankyouMokuhyou = mokuhyou.Cells(2 + Counter, 5).Value '私の環境目標 Sikaku1 = sikaku.Cells(3 + Counter, 4).Value '資格表の左から Sikaku2 = sikaku.Cells(3 + Counter, 5).Value Sikaku3 = sikaku.Cells(3 + Counter, 6).Value Sikaku4 = sikaku.Cells(3 + Counter, 7).Value Sikaku5 = sikaku.Cells(3 + Counter, 8).Value Sikaku6 = sikaku.Cells(3 + Counter, 9).Value Sikaku7 = sikaku.Cells(3 + Counter, 10).Value Sikaku8 = sikaku.Cells(3 + Counter, 11).Value Sikaku9 = sikaku.Cells(3 + Counter, 12).Value 'ひな形に入力 tempWS.Range("G1") = Simei tempWS.Range("D1") = Busho tempWS.Range("A4") = HinsitsuMokuhyou tempWS.Range("A6") = KankyouMokuhyou tempWS.Range("B9") = Sikaku1 tempWS.Range("C9") = Sikaku2 tempWS.Range("D9") = Sikaku3 tempWS.Range("E9") = Sikaku4 tempWS.Range("G9") = Sikaku5 tempWS.Range("I9") = Sikaku6 tempWS.Range("K9") = Sikaku7 tempWS.Range("N9") = Sikaku8 tempWS.Range("P1") = Sikaku9 '貼り付けは10個なのでべた書き Select Case CounterforCard Case 1 tempWS.Range("A1:P9").Copy nafuda.Range("A4") Case 2 'このコピー&貼り付けだと画像はコピーしない。 'tempWS.Range("A1:P9").Copy 'nafuda.Range("A17").PasteSpecial xlPasteAll 'だから以下を使う tempWS.Range("A1:P9").Copy nafuda.Range("A17") Case 3 tempWS.Range("A1:P9").Copy nafuda.Range("A30") Case 4 tempWS.Range("A1:P9").Copy nafuda.Range("A43") Case 5 tempWS.Range("A1:P9").Copy nafuda.Range("A56") Case 6 tempWS.Range("A1:P9").Copy nafuda.Range("Q4") Case 7 tempWS.Range("A1:P9").Copy nafuda.Range("Q17") Case 8 tempWS.Range("A1:P9").Copy nafuda.Range("Q30") Case 9 tempWS.Range("A1:P9").Copy nafuda.Range("Q43") Case 0 tempWS.Range("A1:P9").Copy nafuda.Range("Q56") Case Else End Select Next Counter Set shtMeibo = Nothing End Sub 質問者さんは、そこそこコードが書けるみたいだから、後はネットで検索してサンプルからパーツを組み合わせればいい。 頑張って! |
![]() |
投稿日時: 22/03/14 17:42:43
投稿者: QooApp
|
---|---|
ほぼ同様の仕様の自動転記・印刷のマクロを過去開発した経験がありますが、
|
![]() |
投稿日時: 22/03/14 19:00:30
投稿者: mattuwan44
|
---|---|
>200人近くいて、写真も貼らなくてはいけません。
|
![]() |
投稿日時: 22/03/15 09:27:11
投稿者: simple
|
---|---|
回答者の皆さんから質問や提案が出されていますが、反応いただきたいですね。
|
![]() |
投稿日時: 22/03/15 16:03:53
投稿者: WinArrow
|
---|---|
私も
|
![]() |
投稿日時: 22/03/15 17:13:38
投稿者: simple
|
---|---|
その件は、Suzuさんが 投稿日時: 22/03/14 09:34:20の
|
![]() |
投稿日時: 22/03/17 12:23:10
投稿者: simple
|
---|---|
Q&A 掲示板ご利用上のお願い
|