質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

4097閲覧

VBAで別シートの値をフォーム参照する方法

rotai_miju

総合スコア3

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/04/30 11:39

前提・実現したいこと

シート1でフォームを開きます。
フォームではID、名前、年齢を入力して登録します。
IDは表の一番下のIDを取得して+1してフォームに出るようにしています。
下記の表を例とすると、フォームのIDでは3が出るようになってます。

ID名前年齢
1山田太郎22
2佐藤花子19

ここでID2の佐藤花子を削除します。
次に登録するIDを3からにしたいのですが、今の仕様だと表の一番下のID+1を取得するため2になってしまいます。
そのため、フォーム登録の書き込みをシート1とプラスでシート2におこないます。(セル値は同じ)
シート1の方ではメンバーの削除をおこなえるようにし、シート2では今まで登録した全メンバーが見れるようにします。
フォームのIDをシート2から取得することで、上記のような場合でもIDを3からにできると考えました。

しかし、シート2でIDを取得しているつもりなのですが、反映されません。

該当のソースコード

VBA

1 '登録ボタンを押した時の処理' 2Private Sub OkButton1_Click() 3 '入力されている一番最後のセルの番号を取得' 4 CellCount = Cells(8, 1).End(xlDown).Row + 1 5 6 7 'IDTextBoxの値を"ID"の欄に入力' 8 Cells(CellCount, 1).Value = Me.IDTextBox.Value 9 Worksheets("シート2").Cells(CellCount, 1).Value = Me.IDTextBox.Value 10 11End Sub 12 13 '入力画面が表示されたときの処理(自動処理)' 14Private Sub UserForm_Initialize() 15 16 If Worksheets("シート2").Cells(9, 1).Value = "1" Then 17 IDTextBox.Text = Worksheets("シート2").Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1).Value + 1 18 Else 19 IDTextBox.Text = 1 20 End If 21 22 23 24End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

試していないので保証はできませんが、17行目について

VBA

1IDTextBox.Text = Worksheets("シート2").Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1).Value + 1

とありますが、最終行を取得している下記の部分は、ワークシートの指定がアクティブシートになっています。
Cells(Rows.Count, 1).End(xlUp).Row

例えば、下記のように修正してお試しください。

VBA

1Dim lastRow AS Long 2 3lastRow = Worksheets("シート2").Cells(Rows.Count, 1).End(xlUp).Row 4IDTextBox.Text = Worksheets("シート2").Cells(lastRow, 1).Value + 1

投稿2020/04/30 13:10

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

私だけかもしれませんが、シート1のデータを消す意味が理解できませんので、
シート2の一覧のサンプルがあるとコードの検証が早いと思います。

投稿2020/04/30 12:27

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rotai_miju

2020/04/30 12:30

わかりづらくてすみません…イメージは勤怠のメンバー表なので、辞めた人のデータを削除するという意味です…
退会済みユーザー

退会済みユーザー

2020/04/30 12:56 編集

通常の考え方ですと、退職年月日や退職フラグをいれて消さないのがデータベース的な 考え方になるとおもいます。。。 そのためのシート2なんだと思います・・。 コードを検証していないので机上の回答ということで気にされなくて大丈夫です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問