[[20180829123516]] 『Me.の指定方法がわかりません…』(VBA迷走中) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Me.の指定方法がわかりません…』(VBA迷走中)

 タイトルの通りMe.の指定方法がいまいちよくわかっておらず迷走しております…

 最終行の2~4つ下のセルの内容を切り取り、
 refeditで指定した列の右から一つ(A:AならばA)を取り出し
 A1というものに変えてOffsetで場所を指定して貼り付けるというものです。

 Dim j As Long, k As Long
 For j = 2 To 5
 For k = 1 To 4

 Cells(maxrow + j, 1).Select
 Selection.Cut
 Range(Right(Me.Userform("列指定" & j ).1) & "1").Offset(5, k).Select
 Selection.Paste

 Next k
 Next j

 この状態だと「メソッドまたはデータメンバーが見つかりません」となります。
 「Me.U」が黄色く指定されたのでそこを改修し

 Dim j As Long, k As Long
 For j = 2 To 5
 For k = 1 To 4

 Cells(maxrow + j, 1).Select
 Selection.Cut
 Range(Right(Me.Userform("列指定" & j ).1) & "1").Offset(5, k).Select
 Selection.Paste

 Next k
 Next j

 に変更してみると動いたのはいいのですが切り取り貼り付けがされませんでした。
 どのようにすると切り取り貼り付けがされるようになるのでしょうか…
 どなたかご教示頂けると幸いです。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


Me というのがユーザーフォームのことなので

 Me.Userform("列...  →  Me.("列...

で大丈夫ですよ。

(TAKA) 2018/08/29(水) 13:13


 >Me.の指定方法がわかりません…

 Meキーワードはそのコードが書かれているオブジェクトを参照します。
 ThisWorkbook
 Worksheet
 Form
 などのコードモジュールに書かれてる場合です。

 Me.TestBox1 のMeはUserForm1(ユーザーフォームの名前がUserForm1の場合)
 Me.Range("A1") はWorksheets("Sheet1").Range("A1")

 わかりますか?

 Me.Userform
 はUserFormというコントロールがあればそのように書けますが....
(seiya) 2018/08/29(水) 13:14

 簡単に確認するには
 MsgBox Me.Name
 でオブジェクト名が確認できます。
(seiya) 2018/08/29(水) 13:27

 TAKAさん seiyaさん
 コメントありがとうございます。
 Me.userformだと2重になってたんですね…ご教示頂きありがとうございます。
 TAKAさんの通りにUserformを削除して作成すると
 コンパイル エラー:
 修正候補:識別子 または 角かっこ([])で囲む必要がある名前が含まれています。
 とエラー文が出てしまいました…
 これはどのように修正を行えばいいのでしょうか…
(VBA迷走中) 2018/08/29(水) 14:43

 カンマじゃないの?

  Range(Right(Me("列指定" & j ),1) & "1").Offset(5, k).Select
                              ^^^
(seiya) 2018/08/29(水) 14:51

コードだけでは何がやりたいのかよくわかりません、、
列指定 というのは TextBox かなにかの名前ですか?
maxrow というのは 最終行のことですか?
最終行 の一つ下のセルを切り取りしてるみたいですが本当にあってますか??

     Sub Macro2()
        Dim j As Long, k As Long
        For j = 2 To 5
            For k = 1 To 4
                Cells(maxrow + j, 1).Select
                Selection.Cut
                Range(Right(Me.UserForm("列指定" & j), 1) & "1").Offset(5, k).Select
                Selection.Paste
            Next k
        Next j
    End Sub

構文的に間違っているのは

Right(Me.Userform("列指定" & j ).1)

この部分です。

Right関数は Right(文字列 , 文字数)
というように、ピリオドではなくカンマで区切ります。

(TAKA) 2018/08/29(水) 14:55


あと余計なお世話かもしれませんが、、

Select → Selection は無駄な上に遅い上に画面がちらちらします。
ペンで書く でいいところを
ペンを持つ、持っているもので書く と書いているようなものです。

    Sub Macro2()
        Dim j As Long, k As Long
        For j = 2 To 5
            For k = 1 To 4
                Cells(maxrow + j, 1).Cut Range(Right(Me.UserForm("列指定" & j), 1) & "1").Offset(5, k).Select
            Next k
        Next j
    End Sub

(TAKA) 2018/08/29(水) 15:04


最後の .Select は消し忘れです。
(TAKA) 2018/08/29(水) 15:06

 TAKAさん seiyaさん
 すいませんカンマは完全に質問する時のこちら側のミスです。
 ただ一度一から構文を組んだところエラー文が出ずに作成することが出来ました。
 カンマの隣の空白が問題だったのではないかな…?と感じます。
 おかげでスッキリしました…!
 前までForNextを使わずに長ったらしい文だったので凄い見やすくなりました。
 ありがとうございまいした。

 追記
 Select→Selectionではなくその方が見やすいですね…!
 マクロ記録で学んでたのが仇になってます…
 修正します。ありがとうございます。
(VBA迷走中) 2018/08/29(水) 15:15

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.