VBA素人です。
質問内容も素人で誠に恐縮ですがよろしくお願いいたします。
以下の内容、分かる方が見えたらご教授お願いします。
エクセルVBAで個人情報を登録するユーザーフォームを作成しています。フォームに入力した内容はワークシートに反映されるようになっています。
1行目はタイトルで、2行目以降に個人情報が入ります。
A列にコードとして、数字を1~100まで入力してますが、フォーム側で削除をするとその番号が欠番になってしまいます。
そこで、関数を使いA2のセルからA101にかけて、=ROW(A2)-1、=ROW(A3)-1...と入れました。
ワークシート上で行を削除すると、欠番は発生しないのですが、フォーム側で削除すると、セルに登録されている関数が消え、欠番が発生してしまいます。
そこで、次はアクティブになっている行番号-1にするマクロでやればいいのかなと安易に考え、
Public Sub CODE()
Me.laCODE.Caption = ActiveCell.Row - 1
End Sub
といったプロシージャをつくりました。
そうすると開いたレコードが全て同じ数値になってしまいました。
色々と思案してみましたが、自力で出来そうにありませんので、お力を借りればと思います。
どんな方法でも結構ですので、フォームにレコード番号を表示させるやり方をご教授ください。
No.1ベストアンサー
- 回答日時:
> 関数を使いA2のセルからA101にかけて、=ROW(A2)-1、=ROW(A3)-1...と入れました。
関数を全て「=ROW()-1」としてみてはいかがでしょう。
=ROW() は、その関数が入っているセルの行番号を返します。A2セルの「=ROW()」と「=ROW(A2)」は、同じ値が返ってきます。
ただ、
> ワークシート上で行を削除すると、欠番は発生しないのですが、
> フォーム側で削除すると、セルに登録されている関数が消え、
> 欠番が発生してしまいます。
が気になります。手操作での削除を「マクロ記録」で記録し、現在のフォーム側の削除方法と同じか、見比べてみて下さい。
ご回答ありがとうございます。
「=ROW()-1]と入れ、マクロの登録で記録したものを削除ボタンに設定しているプロシージャに記載しましたが、結果同じでした。
しかし、laCODEに表示させた値をセルに反映するといった命令になっている事に気付き、その命令を削除したところ、希望している結果になりました。
今回のご指摘が、ヒントとなり大変助かりました。
本当にありがうございました。
No.3
- 回答日時:
A列のコードが数字の1~100であるという前提で。
「データを消去する」というボタンを用意したという前提で。
(消去したい)A列のコードがtextbox1に記入若しくは転記されている前提で。
private sub commandbutton1_click()
’TextBox1に該当する行を削除して上に詰める
if me.textbox1 = "" then exit sub
worksheets("シート名").cells(me.textbox1+1, "A").entirerow.delete shift:=xlshiftup
end sub
ご回答ありがとうございます。
別の方法で無事解決することが出来ました。
教えて下さった方法でも希望する結果になり、大変勉強になりました。
分かりやすく解説もしてくださり、助かりました。
この度は、本当にありがとうございました。
No.2
- 回答日時:
初心者には難しいことだ。
フォーム入力時の、削除後の連続番号などに拘らず、シートデータ入力後にまとめて、シートの列に連続番号をセットする方法で逃げたらどうか。フォームが入力用か表示用かも質問にはっきりかけてない。テキストボックスなどを使うと思うが、.laCODEとかで、ラベルコントロールを使っているのか。フォームに番号を直に表示しているのか。説明が十分でない。
シートの行列ーユーザーフォームーコントロールーシートにデータをセットするトリガーシートとフォームのデータ連動関係など質問には説明すべきです。
エクセルのシートで行削除に対処する(上から連番を振る、不利直す)のはROW()関数で簡単に出来る。
コントロールでは、エクセルシートの情況やデータベース(広い意味ではエクセルのシートはこれにあたる)の情況を検索して、それを番号に使うために、求めないと難しい。このデータベースでの登録済み件数や、番号としての最終番号(飛び飛びの場合など)も、なかなか初心者にはコードを作ることは難しいと思う。
ーー
1単位のデータをシートの行に書き出しているなら、エクセルシートで最終行を取ることは簡単に出来るので、その数に+1などをセットしてはどうだろうか。ただしユーザーフォームとシートでの入力を行き来することなど出来てますか。
ーー
但しシートの行削除を、ユーザーフォームに反映させるなども、大変高等なことと思うので、質問者はあきらめては。
シートの行削除を察知するイベントも、易しい方法は無いと思うから。
ーーー
色々やりたいことは初心者でも、直ぐ思いつくが、VBAレベルで実現できることは限られているのだ。
ソンも素もエクセルシートでフォームにセルの内容を表示するなんてのは、学習例題歯科ありえないのではないか。
シートに見えているのだから、そうする必要性が無い。
ご回答ありがとうございます。
ご指摘の通り、説明が不足しておりました。
結果、自分で設定した命令が邪魔をしていることに気付き解決することが出来ました。
この度はありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 複数のシートからグラフ...
-
エクセルで入力シートから別シ...
-
エクセルで入力→日付を自動判別...
-
Excel VBAを使った重複行の抜き...
-
VBAを利用しオートフィルタで日...
-
VBAのoffsetの動き方について教...
-
エクセルについて質問です 日付...
-
VBA セルの値と同じ名前のシー...
-
エクセルのワークシートが重く...
-
エクセルでのチケット販売POSデ...
-
ExcelVBAで、指定したシートに...
-
VBAでシート名をセルから取得し...
-
エクセルvba アクティブシート...
-
Aシートの情報をBシートに保存...
-
【エクセルVBA】処理速度を...
-
エクセル シフト勤務表から、...
-
エクセルVBAで元のシート上の特...
-
IF, ISNUMBER, INDIRECTの組み...
-
エクセルにて別シートの値を参...
-
【Excel】VLOOKUP関数で複数の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで入力シートから別シ...
-
ExcelVBAで、指定したシートに...
-
エクセルのワークシートが重く...
-
IF, ISNUMBER, INDIRECTの組み...
-
VBA セルの値と同じ名前のシー...
-
Excel ハイパーリンク先のセル...
-
エクセル シフト勤務表から、...
-
Excel 複数のシートからグラフ...
-
VBAでシート名をセルから取得し...
-
Excelの中央値の複数条件について
-
エクセルについて質問です 日付...
-
エクセルで入力→日付を自動判別...
-
VBAのoffsetの動き方について教...
-
エクセル自動の年月
-
エクセルVBA:表の内容を担当者...
-
エクセル 毎日更新する表のデ...
-
エクセル マクロを使って日々...
-
質問:特定文字列から空白行ま...
-
EXCEL VBA 一致しないデータの...
-
エクセルにて別シートの値を参...
おすすめ情報