VBAを使用して特定のシートが選択された場合にセルに入力する方法
- Excel365のVBAを使用して、特定のシートが選択されている場合にセルに入力する方法を説明します。
- 「あ」というシートが選択されている場合は、「あ」シートの「A1」セルに「a」と入力します。同様に、「い」というシートが選択されている場合は、「い」シートの「A1」セルに「i」と入力します。
- それ以外のシートが選択されている場合には何もしないようにします。
- ベストアンサー
VBA 特定のシートが選択されていたら、セル入力
Excel365。簡略化したVBAです。 現在、「あ」というシートが選択されていたら、「あ」シートの「A1」セルに「a」と入力 「い」というシートが選択されていたら「い」シートの「A1」セルに「i」と入力。 それ以外のシートが選択されていたら、何もしない。 If Sheets("あ").Activate Then Range("A1") = "a" ElseIf Sheets("い").Activate Then Range("A1") = "i" Else 以下省略 「い」シート選択中でも、「あ」シートの「a1」セルに入力され、シートを増やしても、「あ」シートの「a1」セルに入力されます。 「い」シートを入力していません。 簡単だと思っていたのですが…。 どんなコードになるのでしょうか?
- Excel(エクセル)
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
「Sheets("あ").Activate」で返してくるTrueを条件にしようとしてるんでしょうけど、Trueが返ってくるということはSheets("あ")をActivateすることに成功しているということなので、その時点で「あ」シートが選択されます。 試しにブレークポイントを設定して順番に確かめてみてください。 他のシートを選択していても「If ActiveSheet.Name = "あ" Then」のところで「あ」シートが選択されるはずです。 選択されたシートの名前で判断させたいなら、「If ActiveSheet.Name = "あ" Then」とした方が間違いがないですよ。 select文使って Select Case ActiveSheet.Name Case "あ" Range("A1") = "a" Case "い" Range("A1") = "i" End Select みたいな感じにしても良いですし。
その他の回答 (2)
- SI299792
- ベストアンサー率48% (713/1474)
' Sub Macro1() ' If ActiveSheet.Name = "あ" Then [A1] = "a" ElseIf ActiveSheet.Name = "い" Then [A1] = "i" End If End Sub
お礼
ctiveSheet.Name なんですね。 アクティブにしていたのが悪いのだとわかりました。 ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17068)
VBAのコードのことが頭いっぱいなのでしょうが、こういうところで質問するときは、 こういうことが必要になる「状況」というか、「事情」を、文章で記述し、 回答者に答え(VBA)コードをもらうのが、良いと思う。初心者の場合なら、発想やロジックそのものがべストやベッターではないと思える場合が多いから。 ーー 質問のケースが必要な場面が思いつかない。むしろシート選択の「イベント」との 関連で、こういうニーズが起こるように思うが、そのことは触れてない。 Private Sub Worksheet_Activate() がないので。 ーー 特殊なケース。シートを3つ以上選択しておいて Sub 選択中のシート枚数と名前を取得する() MsgBox _ ActiveWindow.SelectedSheets.Count MsgBox _ ActiveWindow.SelectedSheets(2).Name '2番目 MsgBox _ ActiveWindow.SelectedSheets(3).Name '3番目 ’この後シート名で処理を分岐記述 End Sub こういうWundow系のVBAも使うべき場合がある。
お礼
確かに、マクロが出来ず、混乱状態でした。 出来るようになって安心して自分の質問を読み返しました。 ありがとうございました。
関連するQ&A
- エクセルVBA 他シート選択・セルへ入力
下記コード内で、シートを選択する際、マクロ呼出前は意図したとおり になるのですが、セル入力前だと上手くいきません。Activateにして もダメでした。根本的に理解していないようなので、教えてください。 よろしくお願いします。 シートAの実行ボタンをクリック Private Sub ButtonA_Click() Application.ScreenUpdating = False tempA = TextBox1 If ButtonB = True Then tempB = "10" End If Sheets("B").Select Call XYZ1 ' ----------------- (問題あり ここから)-------------- Sheets("B").Select Cells(1, 2) = 100 For i = 2 To 200 Cells(i, 2) = Range("B" & i - 1) - Range("A" & i) Next ' ----------------- (問題あり ここまで)-------------- Sheets("A").Select Call XYZ5 Application.ScreenUpdating = True End Sub
- ベストアンサー
- オフィス系ソフト
- VBAについて
いつもお世話になっています マクロ・VBA超初心者です。 質問させてください。 現在シート1の完売のセルの欄に○が入っていれば日付をみてシート2の同じ日付の隣のセルに○を入力しようと思っているのですが、シート2の日付を検索はしているんですが入力がいきません Sheet1 ↓セルA1 ↓セルB1 5月26日 26 B1のセルはDAY(A1)にて出してます 完売 A氏 ○ Sheet2 ↓A列 ↓B列 5月 1日 ・ ・ ・ 26日 ○ ←シート1の所に○が付いているとシート1セルB1と同じ 27日 日付の隣のセルに○を入力 28日 VBA Sub test() Sheets("Sheet2").Select Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate If ActiveCell.Value = Worksheets("Sheet1").Range("B2") Then ActiveCell.Offset(0, 1).Activate If ActiveCell.Value <> "○" Then ActiveCell.Valu = "○" ActiveCell.Offset(0, -1).Activate Else ActiveCell.Offset(0, -1).Activate End If Else End If Loop Sheets("Sheet2").Select Range("A1").Select End Sub どこが間違っているかわからない状態です。 分かりにくい説明ではあるんですが教えてください お願いします。
- 締切済み
- オフィス系ソフト
- 未入力セルとVBAについて
エクセルのVBAについて教えて下さい。独学で調べたのですがわからず…お力をお借りしたいです。 未入力のセルがあった場合、入力しなければ保存できないマクロは知っているのですが、 では、それが結合セルであった場合はどの様になるのでしょうか?例えば、(A1~C1だったら) 又、複数の結合セルにその様な設定をしたい場合もどこに追加して行けばよいのでしょうか? 合わせて教えて頂けたら幸いです。 以下 Private Sub Workbook_BeforeClose(Cancel As Boolean) If Sheets("sheet1").Range("A1") = "" Then MsgBox "必須項目セルが未入力です", 48, "入力エラー" Cancel = True Else ActiveWorkbook.Save End If End Sub
- ベストアンサー
- その他(プログラミング・開発)
- VBAでシート名をセルから取得したいのですが
データシートが数枚あり、そこから、シートごとに必要なデータのみ抽出して、印刷用シート(1枚)にまとめて書きこみたいと思っています。 書きこみは以下のような感じにしています。 Sheets("印刷用シート").Activate Range("A1").Value = Sheets("データ1").Range("A1").Value ここで、データ1というシート名を、色々に変えたいのです。 印刷用シートのセルに「データ1」なり「データ2」なり入力したら、その部分が変わるように変数にしたいのですが、どのようにすればいいでしょうか? VBAを勉強中(初心者)です。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- VBA 選択したセルが空白であったらシートを削除
こんばんは!いつもお世話になっています。 選択したシート1のセル(C9)が空白であったら、選択したシートを削除するマクロ(VBA)を作りましたが、上手く作動しなくて困っています。 どうしたらよいのかよろしくお願い致します。 'シート1のセルC9を選択し、空白か判断する Sub セルの選択() Worksheets("Sheet1").Activate Range("C9").Select If Len(Application.Trim(ActiveCell)) = 0 Then MsgBox("空白セル") End If End Sub '現在アクティブなシートを削除する Sub DeleteWorksheet() Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True End Sub
- 締切済み
- その他(プログラミング・開発)
- VBAでのシート選択について
いつもお世話になります。 VBA初心者で、基本的な質問をしているかもしれませんが、 どうかお付き合いください;; たとえば、以下のようなコードがあったとします。 例) Function Sample() dim x As Integer dim y As Integer x=10 y=100 If x > sheets("シート2").Range("A1") AND y < sheets("シート2").Range("A1") Then 処理 End If End Function 例えば上記のコードのようなものがあったとして、 シート名を省いて文字数を減らす方法はあるでしょうか? 1つのFunction内では「このシート」しか参照しないというような指定が出来ると、 If x > Range("A1") AND y < Range("A1") Then というように簡単にできますよね? 他のFunctionでは、シートの指定はさせたくないので、 End Functionの手前で、「シート指定終了」というのを 記述できればベストなのですが…。 どうかよろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- シートにデータがなければ削除するVBA
こんばんは、VBAについて質問させてください(^O^) あるブックに32個のシートが入っています。 32個のシートのうち、セルA2にデータの入っているシートとそうでない シートがあります。(毎回変動します。) これを踏まえて、セルA2にデータが入っていればそのまま、 入っていなければそのシートを削除。 という作業をVBAでやろうと思って以下の通りVBAを記述したのですが、 シートが削除されるとシートの数が変わってしまうので、これではだめだと 思ったのですが、どのように記述すればいいのか分かりません(T_T) どなたかご教授いただけないでしょうか、よろしくお願いいたします。 Sub Macro1() Application.DisplayAlerts = False Dim i As Integer For i = 1 To 32 Sheets(i).Select If Range("A2").Value = "" Then Sheets(i).Delete End If Next i End Sub
- ベストアンサー
- Visual Basic
- エクセルVBAについて教えてください。
DSUMを使ってVBAで自動計算をさせたいのですがうまくいきません。 ・Sheetsデータにデータを置いていて、A1からU1610までデータが入ってます。 ・Sheets集計用は計算させるための(条件を入れる)シートで、A1からE列まで(選択する項目によって何行目になるかわかりません。) ・mycountでE列のデータが入ってる行を出してます。 ・部屋タイプで1K~1LDKを選ぶとDSUMの式のタイプに1を入れたいのです。(1K~1LDKの場合はCells(1,3) 下記のように書いてみましたが上手くいきません。 どなたかご教授いただけると助かります。 mycount = "=COUNT(集計用!E2:E300)" Sheets("集計用").Cells(5, 7).Value = Range("g10") = " =DSUM(cells(データ!,1),1610,21),cells(データ!1,タイプ),cells(集計用!),cells(mycount,5))" '部屋タイプの選択 If Sheets("フォーム").Range("c30") = "1K~1LDK" then タイプ = 3 ElseIf Sheets("フォーム").Range("c30") = "2K~2LDK" Then タイプ = 6 ElseIf Sheets("フォーム").Range("c30") = "3K~3LDK" Then タイプ = 9 ElseIf Sheets("フォーム").Range("c30") = "4K~4LDK" Then タイプ = 12 Else Sheets("フォーム").Range("c30") = "その他" Then タイプ = 15 End If
- ベストアンサー
- Visual Basic
- エクセルVBAで選択していないシートのセルコピー
エクセルVBAで質問させてください。 現在選択していないシートから、セルの書式ごとコピーして貼り付けたいのです。 たとえば Sheets(1).Range(Cells(1, 1), Cells(4, 1)).Copy Sheets(2).Range("A1") 等とすると、Sheets(2)が選択されている状態だとエラーになってしまいます。 おそらく、Copyメソッドというのは、選択されているシートにのみ有効だからなのではないか、と思いますが、セルの値だけでなくフォントその他の書式を、別のシート(現在アクティブでない)から持ってくる方法はありますか?
- ベストアンサー
- その他(ソフトウェア)
- 【Excel VBA】ワークシートの表示(続き)
すみません。 追記が出来なかったため、コードの続きをこちらに記載します。 For i = 1 To 12 If actsht = tmp(i) Then Flag = 1 Anser = MsgBox("翌月分シートを作成しますか?", vbYesNo + vbDefaultButton1, "確認") If Anser = vbYes Then ActiveSheet.Copy After:=ActiveSheet ActiveSheet.Name = tmp(i + 1) Sheets(actsht).Tab.ColorIndex = 2 Sheets(actsht).Range("B3").Value = Sheets("Sheet2").Range("A1").Value Sheets(actsht).Range("B4").Value = Sheets("Sheet2").Range("A2").Value ActiveSheet.Range("A2").Select Exit For ElseIf Anser = vbNo Then Exit For End If End If Next If Flag = O Then MsgBox ("新しいワークシートを作成出来ません。") End If If actsht = tmp(i) Then If Sheets(元データ).Visible = False Then Sheets(元データ).Visible = True End If End If End Sub
- 締切済み
- 情報工学
お礼
出来ました。 ありがとうございました。 仰る通り、ブレイクポイントしたら、最初の指定の仕方が間違っていました。