★★★★★★Access2000VBA・Excel2000VBA独学~★「TABで」じゃなくて「全部Enterで」右の列へ移動し、(列の最右端を自動判別して)「一番右端の列にきたら、Enterキーを押したときに、自動的に次行に移り、アクティブセルを先頭へ移動させるVBAプログラム(テンキー用?かも)~
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
★ Enterキーを押したときに、アクティブセルを下へ移動させるボタンのマクロ内容
以下のコードを、クイックアクセスツールバーやリボンにボタンとして登録します。
※Worksheet_DeactivateやWorksheet_Activateイベントに書いてもOKです。
1 2 3 4 5 6 7 8 9 10 |
' ' Private Sub EnterToDown() Application.MoveAfterReturn = True Application.MoveAfterReturnDirection = xlDown End Sub ' ' |
★ Enterキーを押したときに、アクティブセルを右へ移動させるボタンのマクロ内容
こちらも以下のコードを、クイックアクセスツールバーやリボンにボタンとして登録します。
※こちらもWorksheet_DeactivateやWorksheet_Activateイベントに書いてもOKです。
1 2 3 4 5 6 7 8 9 10 |
' ' Private Sub EnterToRight() Application.MoveAfterReturn = True Application.MoveAfterReturnDirection = xlToRight End Sub ' ' |
★ 表の、列名の終端を自動判別して、一番右端の列にきたら、Enterキーを押したときに、自動的に次行に移り、アクティブセルを先頭へ移動させるVBA内容
入力中の各シートのWorksheet_SelectionChangeイベントに書くなどします。
あるいは標準モジュールに関数化して呼び出してもいいかもしれません。
全部Enterキーで右に移動して・かつ・右端にきたらEnterで自動で折り返すには、事前に「EnterToRight()」を実行しておく必要があります。
逆に、全部TABキーで右に移動し、次行の折り返しもTABキーでいいなら、何もする必要はありません。
使いたくない時はコメントアウトするか、ON・OFFできるように作り変えてみてください。
例えばON・OFFできるようにしたいなら、グローバル変数を1つ用意して、ボタンを押したらそれに「1」が入るようにし、以下のコードを、「1」の時しか動かないようにする・・・・みたいな感じで、できるかもしれません。
なお、表の最右端の判別には、「Worksheet.UsedRangeプロパティ」をベースにして判別しているので、もし意図しない動きだったら、「Worksheet.UsedRangeプロパティ」ベースでの判別のかわりに、ご自分の望む判別方法に書き換えてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
' ' '###################################################################### '表の右端まで行ったら改行するコード。 ' '※シート内に表が1つだけの場合にしか使えません。 ' シートに最低限、1つの列名を作ってからこのコードを貼り付けてください。 ' 列の増加については、オートフィルで列名の入った領域を ' 右に伸ばしてから、列名を調整してください。 ' あるいは、表の2、3列外側で列名を入力したのち ' その列をShiftキーを押しながら目的の位置に移動してください。 ' (表の右端の列にセルが移動すると先頭の列に戻ってしまうため) '###################################################################### Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim i_RgtEndClmn01 As Integer '表の右端の列の位置を格納するための変数 'イベントの発生を一時中断する。 'これしておかないと一気に100行移動してしまうので。 Application.EnableEvents = False '表の右端の列の番号(つまり表の右端の列の位置)を取得する。 i_RgtEndClmn01 = ActiveSheet.UsedRange.Columns.Count '●メイン処理 '表の右端まで行ったら改行する。 If TypeName(Selection) = "Range" Then 'もし選択されているものがRangeオブジェクトなら '以下の処理 If Selection.Column = i_RgtEndClmn01 + 1 Then 'もしセルが、 '表の右端の次の列に移動したら次の処理 '一行下がって、先頭の列へ選択を移動。 ActiveCell.Offset(1, 0 - i_RgtEndClmn01).Select Else 'それ以外は何もしないで次へ。 End If Else '選択されたものがRangeオブジェクトじゃなかったら '何もしないで次へ。 End If 'イベントの発生を再開させる。 Application.EnableEvents = True End Sub ' ' |
- 投稿タグ
- 「ニセモノ」への道, 「本物」に近づくために, AccessVBA, Accessの独学, Access操作の基礎, Accesの独学, ADO/DAO, ExcelSQL, ExcelVBA, Excelの独学, Excel操作の基礎, Excel連携VBA, MicrosoftQuery, ODBC, SQL, パソコンでの自動化, マクロ, 独学, 自動化