アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

といったプロシージャをつくりました。
そうすると開いたレコードが全て同じ数値になってしまいました。

色々と思案してみましたが、自力で出来そうにありませんので、お力を借りればと思います。

どんな方法でも結構ですので、フォームにレコード番号を表示させるやり方をご教授ください。

A 回答 (3件)

> 関数を使いA2のセルからA101にかけて、=ROW(A2)-1、=ROW(A3)-1...と入れました。



関数を全て「=ROW()-1」としてみてはいかがでしょう。
=ROW() は、その関数が入っているセルの行番号を返します。A2セルの「=ROW()」と「=ROW(A2)」は、同じ値が返ってきます。

ただ、
> ワークシート上で行を削除すると、欠番は発生しないのですが、
> フォーム側で削除すると、セルに登録されている関数が消え、
> 欠番が発生してしまいます。
が気になります。手操作での削除を「マクロ記録」で記録し、現在のフォーム側の削除方法と同じか、見比べてみて下さい。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

「=ROW()-1]と入れ、マクロの登録で記録したものを削除ボタンに設定しているプロシージャに記載しましたが、結果同じでした。
しかし、laCODEに表示させた値をセルに反映するといった命令になっている事に気付き、その命令を削除したところ、希望している結果になりました。
今回のご指摘が、ヒントとなり大変助かりました。

本当にありがうございました。

お礼日時:2011/11/29 11:04

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
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

別の方法で無事解決することが出来ました。
教えて下さった方法でも希望する結果になり、大変勉強になりました。

分かりやすく解説もしてくださり、助かりました。
この度は、本当にありがとうございました。

お礼日時:2011/11/29 11:11

初心者には難しいことだ。

フォーム入力時の、削除後の連続番号などに拘らず、シートデータ入力後にまとめて、シートの列に連続番号をセットする方法で逃げたらどうか。
フォームが入力用か表示用かも質問にはっきりかけてない。テキストボックスなどを使うと思うが、.laCODEとかで、ラベルコントロールを使っているのか。フォームに番号を直に表示しているのか。説明が十分でない。
シートの行列ーユーザーフォームーコントロールーシートにデータをセットするトリガーシートとフォームのデータ連動関係など質問には説明すべきです。
エクセルのシートで行削除に対処する(上から連番を振る、不利直す)のはROW()関数で簡単に出来る。
コントロールでは、エクセルシートの情況やデータベース(広い意味ではエクセルのシートはこれにあたる)の情況を検索して、それを番号に使うために、求めないと難しい。このデータベースでの登録済み件数や、番号としての最終番号(飛び飛びの場合など)も、なかなか初心者にはコードを作ることは難しいと思う。
ーー
1単位のデータをシートの行に書き出しているなら、エクセルシートで最終行を取ることは簡単に出来るので、その数に+1などをセットしてはどうだろうか。ただしユーザーフォームとシートでの入力を行き来することなど出来てますか。
ーー
但しシートの行削除を、ユーザーフォームに反映させるなども、大変高等なことと思うので、質問者はあきらめては。
シートの行削除を察知するイベントも、易しい方法は無いと思うから。
ーーー
色々やりたいことは初心者でも、直ぐ思いつくが、VBAレベルで実現できることは限られているのだ。
ソンも素もエクセルシートでフォームにセルの内容を表示するなんてのは、学習例題歯科ありえないのではないか。
シートに見えているのだから、そうする必要性が無い。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご指摘の通り、説明が不足しておりました。
結果、自分で設定した命令が邪魔をしていることに気付き解決することが出来ました。

この度はありがとうございました。

お礼日時:2011/11/29 11:06

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