Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2080 / 13645 ツリー ←次へ | 前へ→

【70054】最大文字数をselect free 11/10/12(水) 18:55 質問[未読]
【70055】Re:最大文字数をselect kanabun 11/10/12(水) 19:26 発言[未読]
【70056】Re:最大文字数をselect Hirofumi 11/10/12(水) 19:27 回答[未読]
【70058】Re:最大文字数をselect free 11/10/12(水) 19:55 お礼[未読]
【70057】Re:最大文字数をselect kanabun 11/10/12(水) 19:36 発言[未読]
【70059】Re:最大文字数をselect free 11/10/12(水) 21:00 発言[未読]
【70060】Re:最大文字数をselect kanabun 11/10/12(水) 21:15 発言[未読]
【70125】Re:最大文字数をselect free 11/10/16(日) 22:50 お礼[未読]

【70054】最大文字数をselect
質問  free  - 11/10/12(水) 18:55 -

引用なし
パスワード
   Private Sub CommandButton81_Click()
Dim myst As String
Dim lastrow As Long
Dim i As Long
Dim mystlen As Long
 With ActiveSheet.usedrange
  lastrow = .Rows(.Rows.Count).Row
 End With
   For i = lastrow To 1 Step -1
    myst = ActiveSheet.Cells(i, 1)
     mystlen = Len(myst)
     If mystlen > mystlen Then
      ActiveSheet.Cells(i, 1).Select
     End If
   Next
End Sub
最大文字数をselectしたいのですがエラーも出なくselectもされません。
素人なのでどこが悪いのかわかりません。
指摘願います。
少しは進歩したつもりが……

【70055】Re:最大文字数をselect
発言  kanabun  - 11/10/12(水) 19:26 -

引用なし
パスワード
   ▼free さん:こんにちは〜

>最大文字数をselectしたいのですがエラーも出なくselectもされません。
>素人なのでどこが悪いのかわかりません。

>     If mystlen > mystlen Then

に問題アリです。
どう説明したらよいか分からないので、とりあえず、
「同じものを比較しても比較にはなりません」
とだけ言っておきます。

【70056】Re:最大文字数をselect
回答  Hirofumi  - 11/10/12(水) 19:27 -

引用なし
パスワード
   ▼free さん:
>Private Sub CommandButton81_Click()
> Dim myst As String
> Dim lastrow As Long
> Dim i As Long
> Dim mystlen As Long
> With ActiveSheet.usedrange
>  lastrow = .Rows(.Rows.Count).Row
> End With
>   For i = lastrow To 1 Step -1
>    myst = ActiveSheet.Cells(i, 1)
>     mystlen = Len(myst)
>     If mystlen > mystlen Then
>      ActiveSheet.Cells(i, 1).Select
>     End If
>   Next
>End Sub
>最大文字数をselectしたいのですがエラーも出なくselectもされません。
>素人なのでどこが悪いのかわかりません。
>指摘願います。
>少しは進歩したつもりが……

最大値はループが回り切らなければ解らないのでは?
それと
>     If mystlen > mystlen Then
は、同じ物を比較しています

Private Sub CommandButton81_Click()

  Dim myst As String
  Dim lastrow As Long
  Dim i As Long
  Dim mystlen As Long
  
  Dim lngMaxRow As Long
  Dim lngMaxLen As Long
  
  With ActiveSheet.UsedRange
    lastrow = .Rows(.Rows.Count).Row
    lngMaxRow = lastrow
    lngMaxLen = Len(.Cells(lngMaxRow, 1).Text)
    For i = lastrow - 1 To 1 Step -1
      mystlen = Len(.Cells(i, 1).Text)
      If mystlen > lngMaxLen Then
        lngMaxRow = i
        lngMaxLen = Len(.Cells(i, 1).Text)
      End If
    Next
    .Cells(lngMaxRow, 1).Select
  End With
  
End Sub

【70057】Re:最大文字数をselect
発言  kanabun  - 11/10/12(水) 19:36 -

引用なし
パスワード
   以下はあなたのコードとよく似ていますが、
このばあいは最大文字数のセルをSelectすると思います。
どこがどう違うか、調べてみてください。

Private Sub CommandButton1_Click()
 Dim myStLen As Long
 Dim i As Long, L As Long
 Dim LastRow As Long
 
 With ActiveSheet.UsedRange
   For i = 1 To .Rows(.Rows.Count).Row
     L = Len(.Cells(i, 1).Value)
     If L > myStLen Then
       myStLen = L
       .Cells(i, 1).Select
     End If
   Next
 End With
End Sub

【70058】Re:最大文字数をselect
お礼  free  - 11/10/12(水) 19:55 -

引用なし
パスワード
   なるほど。同じものを比較してしまっていますね。
最終行の数を基準に比較していったらいいですね。
.textがミソですね。

指摘されなかったら.text絶対入れてないですね。
ありがとうございます。

感謝。感謝

【70059】Re:最大文字数をselect
発言  free  - 11/10/12(水) 21:00 -

引用なし
パスワード
   このコードの場合、最初にIf L > myStLen Thenを通過する時に最大文字数mystlenが無いと思うのでですがエラーになりません。
最初の比較はどうなるのか概念がわかりません。
比較対照がないのになぜ?

もうひとつ L = Len(.Cells(i, 1).Value)だったら.valueいらないのでは?
.textにするならわかるけど。
基本的には.textの方がいいのかな?
よくわかりません。

指摘願います。
>Private Sub CommandButton1_Click()
> Dim myStLen As Long
> Dim i As Long, L As Long
> Dim LastRow As Long
> 
> With ActiveSheet.UsedRange
>   For i = 1 To .Rows(.Rows.Count).Row
>     L = Len(.Cells(i, 1).Value)
>     If L > myStLen Then
>       myStLen = L
>       .Cells(i, 1).Select
>     End If
>   Next
> End With
>End Sub

【70060】Re:最大文字数をselect
発言  kanabun  - 11/10/12(水) 21:15 -

引用なし
パスワード
   ▼free さん:
>このコードの場合、最初にIf L > myStLen Thenを通過する時に最大文字数mystlenが無いと思うのでですがエラーになりません。
>最初の比較はどうなるのか概念がわかりません。
>比較対照がないのになぜ?

変数myStLen はLong型(数値型)の変数として宣言しています。
よって、宣言した時点で 数値0 に「初期化」されています。
最初の比較は
  If L > 0 Then
となって、ただしく比較されています。


>もうひとつ L = Len(.Cells(i, 1).Value)だったら.valueいらないのでは?
>.textにするならわかるけど。
>基本的には.textの方がいいのかな?

Cells(i,1) ではセル自身(Rangeオブジェクト)です。比較したいのは
セルの値ですから .Value プロパティを省略しないのが原則です。
また(おっしゃるように)せっかくプロパティを使うんなら(文字列の
比較だから) .Textプロパティを使ったほうがいい、ということはいえる
でしょうね。
(とくに調べる範囲の中に、数値や空白セルが存在するとき)

あと、実際にどのくらいの行数があるのか分かりませんが、
調べたいA列のデータを以下のように配列に入れておいて、
Loopの中で最大文字数の行を調べてから、そのセルに移動する
というより効率的な(画面がチカチカしない)方法もあることを
覚えておくのも無駄ではないと思います。

Sub Try1()
 Dim v, i As Long
 Dim MaxLen As Long '最大文字数
 Dim MaxPos As Long '最大文字数のある行
 
 v = Application.Text(ActiveSheet.UsedRange.Columns(1), "@")
 For i = 1 To UBound(v)
   If Len(v(i, 1)) > MaxLen Then
     MaxLen = Len(v(i, 1))
     MaxPos = i
   End If
 Next
 'Application.Goto Cells(MaxPos, 1), True
 'または
 Cells Cells(MaxPos, 1).Select
End Sub

【70125】Re:最大文字数をselect
お礼  free  - 11/10/16(日) 22:50 -

引用なし
パスワード
   返信遅くなって申し訳ありません。

かなり勉強になりました。
ありがとうございます。
もっと早く返信できるよう注意します。
▼kanabun さん:
>▼free さん:
>>このコードの場合、最初にIf L > myStLen Thenを通過する時に最大文字数mystlenが無いと思うのでですがエラーになりません。
>>最初の比較はどうなるのか概念がわかりません。
>>比較対照がないのになぜ?
>
>変数myStLen はLong型(数値型)の変数として宣言しています。
>よって、宣言した時点で 数値0 に「初期化」されています。
>最初の比較は
>  If L > 0 Then
>となって、ただしく比較されています。
>
>
>>もうひとつ L = Len(.Cells(i, 1).Value)だったら.valueいらないのでは?
>>.textにするならわかるけど。
>>基本的には.textの方がいいのかな?
>
>Cells(i,1) ではセル自身(Rangeオブジェクト)です。比較したいのは
>セルの値ですから .Value プロパティを省略しないのが原則です。
>また(おっしゃるように)せっかくプロパティを使うんなら(文字列の
>比較だから) .Textプロパティを使ったほうがいい、ということはいえる
>でしょうね。
>(とくに調べる範囲の中に、数値や空白セルが存在するとき)
>
>あと、実際にどのくらいの行数があるのか分かりませんが、
>調べたいA列のデータを以下のように配列に入れておいて、
>Loopの中で最大文字数の行を調べてから、そのセルに移動する
>というより効率的な(画面がチカチカしない)方法もあることを
>覚えておくのも無駄ではないと思います。
>
>Sub Try1()
> Dim v, i As Long
> Dim MaxLen As Long '最大文字数
> Dim MaxPos As Long '最大文字数のある行
> 
> v = Application.Text(ActiveSheet.UsedRange.Columns(1), "@")
> For i = 1 To UBound(v)
>   If Len(v(i, 1)) > MaxLen Then
>     MaxLen = Len(v(i, 1))
>     MaxPos = i
>   End If
> Next
> 'Application.Goto Cells(MaxPos, 1), True
> 'または
> Cells Cells(MaxPos, 1).Select
>End Sub

2080 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free