- ベストアンサー
VBAで
sheet2のE3(得意先名)とE4(得意先コード)をコピーして sheet1のA3へE4+E3(得意先コード得意先名)で貼付けってできますか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
LINERSさん、こんばんは。 私に答えられることでしたら、この際、まとめて答えておきます。(^^; >一覧表に追加された得意先名(+コード)に新規で出来上がったシートへのハイパーリンクを設定することは可能でしょうか? 10人中9人までは、ハイパーリンク付けしていますね。(他は、コマンド・ボタンをつけたり、ダブルクリック・イベントをつけたりする人がいます。) ハイパーリンクは、ちょっとややこしいですね。 たぶん、以下のようにすればできると思います。なお、得意先名は、追加式になっています。 最後、Protect は、シートをSelectしなくても、たぶんできるはずです。 Sub test2() Dim myRng As Range, a Sheets("新規").Copy before:=Sheets(4) With ActiveSheet .Unprotect 得意先シート登録.Show .Name = .Range("A4").Value & .Range("A3").Value .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Set myRng = Sheets("一覧").Range("A65536").End(xlUp).Offset(1) myRng.Value = .Range("A4").Value & .Range("A3").Value Sheets("一覧").Hyperlinks.Add _ Anchor:=myRng, _ Address:="", _ SubAddress:=myRng.Value & "!A1", _ TextToDisplay:=myRng.Value End With Sheets("一覧").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17069)
読んでもよくわからないのですが、後に読む方のために整理すると (1)得意先名と得意先コードを一覧にした表を作る。 普通はA3、A4でなく、A列得意先名、B列得意先コードを入れるのではないですか。 A列 B列 大田産業 101 山田工業 102 ・・・ (2)その得意先名と得意先コードを合成した名前で、新しい1得意先1シートのシートを作る。 Sub test02() i = 1 ActiveSheet.Name = Worksheets("Sheet1").Cells(i, "A") & Worksheets("Sheet1").Cells(i, "B") End Sub iは行によって変化させる。 (3)そのシートは「新規」という名の既存のシートをコピーして作る。 Sub test04() Sheets("新規").Copy after:=Sheets(2) ActiveSheet.Name = "aaa" End Sub "aaa"のところを(2)のやり方で毎回変える (4)フォームで得意先名と得意先コードを入れる 難しい途を選んでいる。勉強にはなるだろうが初心者には難しい方法 。 Sheet1のユーザーフォームにテキストボックス2つとコマンドボタンを貼り付ける。 Public i Private Sub CommandButton1_Click() Worksheets("Sheet1").Cells(i, "A") = UserForm1.TextBox1.Text Worksheets("Sheet1").Cells(i, "B") = UserForm1.TextBox2.Text i = i + 1 End Sub Private Sub UserForm_Initialize() i = 1 End Sub (5)欲を言えば一覧のシートの得意先名をクリックするとそのシートに 飛びたい。 (5)はハイパーリンクのほかに、素朴に Private Sub Worksheet_SelectionChange(ByVal Target As Range) On Error GoTo errrtn Dim sn As String If Target.Column = 1 Then sn = Target.Value MsgBox sn & "を選びました" Worksheets(sn).Activate ActiveSheet.Range("A1").Select End If Exit Sub errrtn: MsgBox "シート見つからず" End Sub で飛びます。 本質問に必要なスキルの一例を挙げてみました。 総合したものをあげたいが、時間がないので省略。
お礼
ご解答感謝します。補足にあげた内容の今現在のコードです。 Sub 得意先追加() Sheets("一覧").Unprotect Dim myRng As Range, a Sheets("新規").Copy before:=Sheets(4) With ActiveSheet .Unprotect 得意先シート登録.Show .Name = .Range("A4").Value & .Range("A3").Value .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Set myRng = Sheets("一覧").Range("A65536").End(xlUp).Offset(1) myRng.Value = .Range("A4").Value & .Range("A3").Value Sheets("一覧").Hyperlinks.Add _ Anchor:=myRng, _ Address:="", _ SubAddress:=myRng.Value & "!A1", _ TextToDisplay:=myRng.Value End With Sheets("一覧").Select Range("A4").Activate Selection.End(xlDown).Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub 本日もこのブックのことで質問を出すと思いますのであげておきます。 超初心者なもので、質問文まで支離滅裂ですがどうぞ宜しくお願いします。 アップしていただいたコードの方も実行したいのですが、フォームはsheet1ではなく各得意先シートにあるのではなく得意先追加実行中に表示させるような形にあり、そこで実行させるためにどうしたら良いか今はわからないので、じっくり勉強させていただきます。 貴重な時間を割いていただき本当に有難うございました。 この質問は一旦閉じますが、本日も質問をあげると思いますので、どうぞ宜しくお願いします。
補足
>読んでもよくわからないのですが~ すみません。質問文もうまくまとめられなくて皆様にも理解しがたくなってしまいました。うまくまとめていただき感謝しております。 ただ、今後もこのブックのコードに関して質問をあげると思いますので一部訂正で >(1)得意先名と得意先コードを一覧にした表を作る。 普通はA3、A4でなく、A列得意先名、B列得意先コードを入れるのではないですか。 >(2)その得意先名と得意先コードを合成した名前で、新しい1得意先1シートのシートを作る。 得意先一覧という得意先コードと得意先名の一覧のシート1がまずあります。そして2枚目以降に各得意先の各月の売上等を入力していくシートが1得意先に対して1シートづつあります。 得意先が追加されたときに得意先追加というコマンドボタンを押すと、シートの一番後ろにある”新規”シート(テンプレートとして存在しています。)をコピーする形で作成、このときに得意先追加のマクロを実行中に得意先シート登録というフォームから得意先名と得意先コードをそれぞれA3・A4へ代入し、代入されたものをA4+A3[得意先コード得意先名](順序が変わります)にしてシート名とし、尚且つ一覧シートの表へそのシート名(A4+A3)の方を追加及びハイパーリンク設定。 こういうことになってます。(皆様のおかげです。)
- Wendy02
- ベストアンサー率57% (3570/6232)
>後、よろしければ、これ↓はどういう意味か教えてください。 その部分をフルに書くと Sheets("一覧").Range("A65536").End(xlUp).Offset(1).Value = _ .Range("A3").Value & .Range("A4").Value となりすまが、 A列のデータの最後尾に、データを貼り付ける、という意味です。 つまり、A列の65536 行目から、「Ctrl+ ↑」とすれば、データの最後の行に行きますね。それをひとつ下がれば、データの継ぎ足しできるというわけです。
お礼
ということはデータがA50まで入っていたらA51を指定する。・・ すごいっすね。 勉強になりました。 ちなみにもうひとつ・・良いでしょうか? 今までの流れで、新規で作った得意先シートへ得意先名と得意先コードをフォームより代入し、それをシート名へ書き込み、その後一覧シートへ移り、一覧表へその得意先名(+コード)を追加するところまでは出来ました。・・これからなんですが、一覧表に追加された得意先名(+コード)に新規で出来上がったシートへのハイパーリンクを設定することは可能でしょうか? コードとは言いません。これまでの流れで可能かどうか知りたいのです。 有難うございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
前回のものを読んでいれば、そのつながりは分かります。 >Range("E3")&Range("E4"),value(copy?)で始まって良いのでしょうか? 私のは、With ステートメントと「.(コンマ)」を使って、無駄な部分を省略しています。 それから、 Sheets("一覧").Range("A3").Value = ... 常に同じ場所に入れるのですか? もしかしたら、 Sheets("一覧").Range("A65536").End(xlUp).Offset(1).Value = _ ではないでしょうか?同じ場所に入れるのですか? 必要に応じて書き換えてください。 ためしに作ってみました。 '-------------------------------------------- Sub 得意先追加() Sheets("新規").Copy Before:=Sheets(4) With ActiveSheet .Unprotect 得意先シート登録.Show .Name = .Range("A4").Value & .Range("A3").Value .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Sheets("一覧").Range("A3").Value = _ .Range("A3").Value & .Range("A4").Value End With End Sub UserForm は、以下のようにしました。 Private Sub CommandButton1_Click() Range("A3").Value = Me.TextBox1.Value Range("A4").Value = Me.TextBox2.Value Unload Me End Sub
お礼
ご解答感謝します。 直しました。 Sub 得意先追加() Sheets("一覧").Select ActiveSheet.Unprotect Rows("4:4").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow Range("A4").Select Sheets("新規").Copy Before:=Sheets(4) With ActiveSheet .Unprotect 得意先シート登録.Show .Name = .Range("A4").Value & .Range("A3").Value .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Sheets("一覧").Range("A3").Value = _ .Range("A3").Value & .Range("A4").Value End With Sheets("一覧").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub 後、よろしければ、これ↓はどういう意味か教えてください。 Sheets("一覧").Range("A65536").End(xlUp).Offset(1).Value = _ 有難うございました。
補足
>Sheets("一覧").Range("A3").Value = ...常に同じ場所に入れるのですか? アップしたコードは省略していまして。([]内を省略してました。) Sub 得意先追加() [Sheets("一覧").Select ActiveSheet.Unprotect Rows("4:4").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow Range("A4:E4").Select Range("E4").Activate Selection.Copy Range("A3").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Range("A3").Select] Sheets("新規").Select~
- Wendy02
- ベストアンサー率57% (3570/6232)
Sub testcopy() With Worksheets("Sheet2") Worksheets("Sheet1").Range("A3").Value = _ .Range("E3").Value & .Range("E4").Value End With End Sub 前回の書き込みから見ていましたが、それから、文字列の場合は、「&」 は、「+」と書いても間違いではありません。また、Text プロパティは、書式に影響を受けますが、Valueプロパティは、書式には影響を受けずに、値を渡すことができます。
お礼
すみませんコピーしたい値のセルはE3&E4ではなくA3&A4でした。
補足
いつも有難うございます。おかげ様で大変勉強になっています。 #1さんの補足に上げましたが、シート名をコード上で記述できません。 なので、新規シートを作っている状態の時に一覧シートのA3へE3&E4を貼り付けたいのです。 そのときは Range("E3")&Range("E4"),value(copy?)で始まって良いのでしょうか? すみませんよろしくお願いします。
- ctrlzr
- ベストアンサー率29% (18/62)
worksheets("sheet1").Range("A3").value = worksheets("sheet2").Range("E3").value & worksheets("sheet2").Range("E4").value
お礼
すみませんコピーしたい値のセルはE3&E4ではなくA3&A4でした。 お礼の欄を使って訂正させていただきます。
補足
ご解答感謝します。 質問文に言葉が足りませんでした。 今、 Sub 得意先追加() Sheets("新規").Select Sheets("新規").Copy Before:=Sheets(4) Sheets("新規 (2)").Select ActiveSheet.Unprotect 得意先シート登録.Show[ここでA3へ得意先名、A4へ得意先コードを代入させています] ActiveSheet.Name = Range("A4").Text & Range("A3").Text [ここに質問のコードを入れたい] Sheets("一覧").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub という状態です。 質問文でいうsheet1が一覧でsheet2(これは”新規”をコピーして作った新しいシートです。)はフォームで得意先名と得意先コードをE3、E4へ代入し、それをシート名にするようにしています。 この状態で質問文のようにする場合にはどうすればよいですか? 文章が支離滅裂ですがよろしくお願いします。
お礼
大変感謝しております。 おかげ様でVBAとの距離が少し縮まった気がしてます。 いただいたコードも問題なく稼動し、尚且つすっきりまとまったので、これに肉付けしたりしてやっていこうと思います。 多分本日も質問を上げると思いますが、宜しければお付き合いください。 この質問はいったん閉めますが、今、シート(一覧)に新たに追加された得意先の行に書式を既存の得意先の行から移そうと思って挑んでいます。(すぐ質問しそうな状態ですが) 本当に有難うございます。