[[20151123132328]] 『特定の文字のときは転記しない方法について』(yasu) ページの最後に飛ぶ

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

 

『特定の文字のときは転記しない方法について』(yasu)

いつも参考にさせていただいています。
以下のマクロなのですがリストから選択し転記しますが、
特定項目「小計」・「値引き」・「合計」は.Offset(, 1)と(,2)は転記
させたくないのですが、可能でしょうか?
よろしくお願いします。

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)

    ActiveCell.Value = ListView1.SelectedItem
    ActiveCell.Offset(, 1).Value = 1
    ActiveCell.Offset(, 2).Value = "式"
    ActiveCell.Offset(2, 0).Select
    Unload Me
End Sub

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 環境がないので書いただけですが。

 Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
    ActiveCell.Value = ListView1.SelectedItem
    Select Case ListView1.SelectedItem
        Case "小計", "値引き", "合計"
            'nop
        Case Else
            ActiveCell.Offset(, 1).Value = 1
            ActiveCell.Offset(, 2).Value = "式"
    End Select
    ActiveCell.Offset(2, 0).Select
    Unload Me
 End Sub

(β) 2015/11/23(月) 14:15


βさん
速攻ありがとうございました。
助かりました。

(yasu) 2015/11/23(月) 14:33


 本題からズレる話で恐縮なのですが、
 仮引数のItem が使われていないことに違和感があるんですけど、
 相場なんでしょうか?

 ※ListViewって、私は使った経験が無いド素人です m(__)m

(半平太) 2015/11/23(月) 14:55


 >>仮引数のItem が使われていないことに違和感があるんですけど、
 >>相場なんでしょうか?

 確かにいわれてみれば・・ですね。 ここは Item.Text を使うのがいいのでしょうかね?
 たとえば、シートモジュールの BeforeDoubleClick で Target を使わず ActiveCell を使うようなものですか。

 相場は、よくわかりません。

 そもそも、ListView に関しては まだ、その使用権利がグレーゾーンにおさまっていた(おさまっていると自己解釈?)2003時代に書いたもので使っていましたが
 今は、基本的にライセンスの問題で新しいコントロールとしては挿入できないようですし、こういった質問がアップされても
 回答するにはつらい状況になってますねぇ。

(β) 2015/11/23(月) 16:50


 コメントありがとうございます m(__)m

 >たとえば、シートモジュールの BeforeDoubleClick で Target を使わず ActiveCell を使うようなものですか。

 ええ。

 >相場は、よくわかりません。
  :     :
 > 今は、基本的にライセンスの問題で新しいコントロールとしては挿入できないようですし、
 > こういった質問がアップされても 回答するにはつらい状況になってますねぇ。

 そうなんですか、了解です。ど素人な質問ですみませんでした。

(半平太) 2015/11/23(月) 17:35


こんにちは。同じくど素人です。

ネットで解説を見ると「listboxの亜種」らしいので
複数選択した場合のSelectedItemは、collectionを返すのかな?
と思います。
(SelectedItemsと複数形になるほうが自然な感じもしますが。)

Itemは常に単一オブジェクトですね。

( 佳 ) 2015/11/23(月) 18:07


 ↑ あっ、私が申し上げた 「こういった質問」とは、(yasu)さんがアップされた
 「ListView に関する質問」という意味です。(汗)
(β) 2015/11/23(月) 18:09

 >>複数選択した場合のSelectedItemは、collectionを返すのかな? 
 >>と思います。 

 詳しくないのですが、MultiSelect を True にしても 行を選択した時点で ItemClickイベントが発生し
 その際の SelectedItem は 引数で渡された Item と全く同じ、単一オブジェクトでした。

(β) 2015/11/23(月) 18:56


>そもそも、ListView に関しては まだ、その使用権利がグレーゾーンにおさまっていた(おさまっていると自己解釈?)2003時代に書いたもので使っていましたが
> 今は、基本的にライセンスの問題で新しいコントロールとしては挿入できないようですし
素人目からですが、Listboxよりマウススクロールが利用出来るので行数の多いリストなどは
大変便利だと思うのですが、新たに組み込むのは問題有りなのでしょうか?
確かに、Excel標準インストールでは組込されていません。たしかに後からMSCOMCTL.ocxをインストールしています。いかがでしょうか
(yasu) 2015/11/24(火) 00:17

 >>大変便利だと思うのですが、新たに組み込むのは問題有りなのでしょうか? 

 詳しくはないのですが、なんとなく、過去にそう言われていたような記憶が・・・

 同じようなコメントを

[[20150126023341]] 『転記方法の切り換えて利用するには』(KK)

 でも申し上げたのですが、 βの勘違い、一人合点かもしれません。

 ↑のトピでも参照されているページを含めて

https://social.msdn.microsoft.com/forums/ja-JP/283b4973-f6f7-47e1-a573-1b70b07d2742/listviewuserform

http://answers.microsoft.com/ja-jp/office/forum/office_2013_release-excel/listview%E3%81%8Cuserform%E3%81%AB%E9%85%8D/625f61dd-50d2-4c6c-825e-b1502dacd95c?msgId=676473a7-19fb-4a24-b36c-0100cec899a1&auth=1

 MSのサイトで利用方法が掲載されていますので、問題はないのかもですね。

(β) 2015/11/24(火) 05:30


MSのサイトで利用方法が掲載されていますので、問題はないのかもですね。 良かったです
安心して利用出来そうです。
今後共よろしくお願いします。
ありがとうございました。

(yasu) 2015/11/24(火) 10:30


こんにちは。
職場で時間が取れたので、自分でも実験してみました。

MultiSelectをTrueにして複数選択した状態で、
SelectedItemは、最後にクリックした項目単体を返しました。

一方Itemは、、、、不思議な動作になりました。
5行目をクリックして、それからShiftキーを押さえて2行目をクリックすると
2行目、3行目、、、と上から順番に4つのオブジェクトが渡されて来て、
最後にもう一度2行目のオブジェクトが来ます。
こんな仕様のものは初めて見ます。
1度のイベントで、単体のオブジェクトが複数渡されるなんて。
....もしかしてこのイベントは作りかけではないのか? という考えさえ起きてしまいます。
いやぁ珍しいものを見せていただきました ^^

明日また時間が取れれば、もう少し突っ込んで眺めてみたいと思います。

( 佳 ) 2015/11/24(火) 20:34


 漢字、半角/全角 ひらがな/カタカナ、英数文字以外を削除
 上手くソートできるか不明

 Private Sub UserForm_Initialize()
    Dim a() As String, n As Long, e, temp As String
    Dim i As Long, ii As Long
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "[^一-龠ぁ-んーァ-ヶA-Za-z0-9\w]+"
        For Each e In Range("h2", Range("h" & Rows.Count).End(xlUp)).Value
            temp = .Replace(e, "")
            If temp <> "" Then
                n = n + 1
                ReDim Preserve a(1 To n): a(n) = temp
            End If
        Next
    End With
    For i = 1 To n - 1
        For ii = i + 1 To n
            If a(i) > a(ii) Then
                temp = a(i): a(i) = a(ii): a(ii) = temp
            End If
        Next
    Next
    Me.ListBox1.List = a
End Sub
(seiya) 2015/11/24(火) 20:38

 To seiyaさん

[[20151124175918]] 『略称を無くして読み込むには』(taka)

 へのレスではないですか?

(β) 2015/11/24(火) 20:50


 あれ?間違えましたね..

 失礼しました。
(seiya) 2015/11/24(火) 21:32

コメント返信:

[ 一覧(最新更新順) ]


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