dポイントプレゼントキャンペーン実施中!

Sheet1のA列に「髙橋・鈴木・加藤」など、100名ほどの名前があり、1行目~100行目までその方の年齢や個人情報があります。

Sheet2を作り、Sheet2のA1に髙橋様、
Sheet3を作り、Sheet3のA1に鈴木様
Sheet4を作り、Sheet4のA1に加藤様、、、、、Sheet100まで作りたいのですが、コピーごとにSheetのA1に名前を入力するのが大変であるため、マクロなど良い方法はありませんでしょうか?

よろしくお願いします

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

  • tom様、なにやら少しずつ答えに近づいているような気がするのですが、やはり私の頭では解読困難な状態です。いっそのこと、エクセルデーターをtom様に送信しご指南いただきたいところです(-_-;)

    チェックボックスについてはフォームコントロールから作成しました。これについて、どうにか利用者100名分をVBAでつくることができました。

    Changeイベント?ですね。初めて聞きますがやってみたいとおもいます・・・。汗

      補足日時:2016/10/01 23:47
  • ご回答ありがとうございます。遅くなり大変失礼しました。

    私が作っているものを写真で添付いたします。
    「利用者情報」の横一列の情報にチェックボックスを使っていくと、TRUEを0、FALSEを-1として、0の場合だけ、「101」の一か月分の表に「〇」が付くようにしています。

    102以降を作成したいのですが、、、、。tom様が教えてくださいましたコードを使ってみたのですが、どこがどう違うのかわからずエラーとなってしまいました。

    再度、お時間があるようでしたらよろしくお願いいたします

    「エクセルのSheetをコピーし複製を繰り」の補足画像2
      補足日時:2016/10/05 15:49
  • 情報が不足していたようです「利用者情報」
    C4起床時はP4。→「101」B44
    D4朝食前はQ4。→「101」B45
    E4朝食後はR4。→「101」D45
    F4昼食前はS4。→「101」B46
    G4昼食後はT4。→「101」D46
    H4夕食前はU4。→「101」B47
    I4夕食後はV4。→「101」D47
    J4眠前はW4。→「101」B48
    K4の8時はX4→「101」B49
    L4の12時はY4→「101」C49
    M4の17時はZ4→「101」D49
    N4の21時はAA4。→「101」E49
    O4の貼付薬は手入力でそのまま「101」B50へ反映させるようにしています。上記の設定を行ったうえで、コピー貼り付けを行い1か月分の表を作成しています。もしかすると、これよりも簡単に作成する方法もあったりするのでしょうか?

    No.5の回答に寄せられた補足コメントです。 補足日時:2016/10/06 12:17

A 回答 (6件)

No.5の質問で、「101」B44に設定されている数式も教えてくださいとリクエストしたつもりなのですが、公開できない内容でしょうか。

    • good
    • 0

『シート「利用者情報」のC4のレ点チェックがあれば、「101号室」のB43に「○」が反映』はできているとのことですが、これはどんな感じで実装されているのでしょうか?


チェックボックスとどこかの作業用セルがリンクされていて、「101号室」のB43はその作業用セルを参照して「○」を表示していると推測しますが、作業用セルの位置(Z4とか)および、「101号室」のB43セルの数式を補足していただけないでしょうか。残念ながら補足コメントの画像からでは推測できませんでした。
この回答への補足あり
    • good
    • 0

続けてお邪魔します。



No.3のコードは質問者様が作られているような「チェックボックス」に対応するコードではなく、
「利用者情報」Sheetのセルそのものをダブルクリックすると
マクロが実行されるコードですので、セルの上にチェックボックスがかぶさっているとまともな動きになりません。
すなわちチェックボックスは全く使わない方法の一例です。
そしてあくまで流れの説明だけでしたので、表の配置が1行・1列でも違えばとんでもない動きになってしまいます。

画面を最大限拡大してみましたが、表のレイアウトが全く分かりません。
必要なのは
① 「部屋番号」シートを決定する要素
② 「部屋番号」シートの行を決定する要素
③ 「部屋番号」シートの列を決定する要素

以上の3点が判らないとお手上げです。

おそらく「部屋番号」シートのレイアウトはすべて統一されているでしょうから
「利用者情報」シートと「部屋番号」シートのレイアウトの一部分だけでも判れば
具体的なアドバイスができるかもしれません。m(_ _)m
    • good
    • 0

No.1・2です。



流れだけの説明ですが、こちらで勝手にやってみました。
「利用者情報」・各部屋のシートは↓の画像のような配置になっている前提のコードです。
行番号がずれるというコトはおそらく日付によって行番号が変わる!と解釈しました。

① 日付セルがどこかにないと各シートの行の判別ができないので
日付で行番号を取得する。(A2セルを日付としています)
② 項目名で列番号を取得する。
としています。

そして「利用者情報」シートの5~E12セルで反応するようにしています。
↓のコードを「利用者情報」シートのシートモジュールにしてください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'この行から//
Dim myRow As Long, myCol As Long, sN As String
Dim c As Range, r As Range, wS As Worksheet
If Intersect(Target, Range("C5:E12")) Is Nothing Then Exit Sub '←範囲は実情に合わせる
Cancel = True
With Target
sN = Cells(.Row, "A")
Set wS = Worksheets(sN)
'▼各シートの行番号を取得//
Set r = wS.Range("A:A").Find(what:=Format(Range("A2"), "m/d"), LookIn:=xlValues, lookat:=xlWhole)
'↑「"m/d"」の部分は「部屋番号」シートの日付表示形式にする
myRow = r.Row '←行番号が決定
'▼各シートの列番号を取得//
Set c = wS.Rows(10).Find(what:=Cells(4, .Column), LookIn:=xlValues, lookat:=xlWhole)
'↑「10」の部分は各シートの項目が入っている行
myCol = c.Column '←列番号が決定
If .Value = "" Then
.Value = ChrW(10003) '←一応「チェック」にしているが他の印でも良いのでは・・・
wS.Cells(myRow, myCol) = "○"
Else
.Value = ""
wS.Cells(myRow, myCol) = ""
End If
End With
End Sub 'この行まで//

これで「利用者情報」SheetのC5~E12セル(←範囲は実情にあわせる)をダブルクリックすると
画像のような感じになります。

チェックが入っているセルをもう一度ダブルクリックすると
チェックも各シートの「○」も消えます。

※ あくまで勝手にこちらで作った配置なので
流れだけでも理解してもらえればよいと思います。m(_ _)m
「エクセルのSheetをコピーし複製を繰り」の回答画像3
    • good
    • 0

No.1です。



ありゃりゃ!
お礼欄の内容は最初の質問とは全く異なりますね。

「チェックボックス」とはActiveXコントロールのチェックボックスでしょうか?
それともフォームコントロールのチェックボックスでしょうか?
ActiveXコントロールのチェックボックスであればコードを記載。
フォームコントロールのチェックボックスであれば「リンクするセル」で対象セルを指定していると思います。

いずれにしても単純にシートをコピーし複製する方法ではかなり厄介だと思います。
(簡単にできる方法があればごめんなさい)

「利用者情報シート」の行もしくは列と101号室・102号室・・・の対象セルには何らかの規則性があると思いますので、
自分であれば以下のような方法にします。

① 必要な部屋数だけまず、名前を付けてシートを複製する。
② 「利用者情報シート」のセルをダブルクリックするとチェックが入ったり消えたりする。
③ ②と同時にチェックを入れたり消したりするセルと関連するシートのセルの「○」や空白の表示をマクロで実行する
(「利用者情報シート」のChangeイベントで可能だと思います)

※ こちらではお手元の詳しいレイアウトが判らないので
この程度でごめんなさい。m(_ _)m
    • good
    • 0

こんばんは!



各シートのA1セルに「名前」(A列だけ)だけを表示し、(他の項目は無視)
シート名には手を付ける必要がないのですね?
一例です。標準モジュールにしてください。

Sub Sample1()
Dim i As Long
With Worksheets("Sheet1")
For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
Worksheets.Add after:=Worksheets(i)
Worksheets(i + 1).Range("A1") = .Cells(i, "A") & "様"
Next i
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。ちょっと自分には難しいのですが、もう少し詳しく情報をお伝えしますので、できれば引き続きご回答いただければと都もいます。
以下、詳細

Sheet1のシート名は「利用者情報」となっています。
Sheet2のシート名は部屋番号「101号室」となっています。

「利用者情報」のセルA4に部屋番号、B4に氏名、C4起床時の内服、D4に朝食前薬、E4に朝食後薬などの項目が横一列あります。C,D,E,以降はチェックボックスを使用し、ありならレ点チェックが入るようになっています。  
A列には100名ほどおり、その横には各々、上記の情報が入力してあります。  

シート「利用者情報」のC4のレ点チェックがあれば、「101号室」のB43に「○」が反映。「利用者情報」のD4の朝食前にレ点チェックがあれば、「101号室」のB44に「○」が反映、レ点チェックがなければ「空白」。これを、1か月分作成しました。
つまり、「利用者情報」のA4からY4までチェックボックスを入力すると、「101」の一か月分の表に「○、or、空白」ができるようになっています。

ここからが、問題となっているのですが、シート「101」をコピー複製を繰り返し、「102」「103」と100名ほど行った場合、「102」の参照元が、すべて利用者情報のA4~Y4となってしまうのです。
自分としては、「102」の参照元はA5~Y5、「103」の参照元はA6~Y6とひとつづつずれていくようなものをつくりたいと考えています。

詳細を書くうちに、最初の質問とは異なっていることに気が付きました。大変申し訳ありませんが、ご回答よろしくお願いいたします。

お礼日時:2016/10/01 20:46

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