Excel VBA質問箱 IV

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

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


6857 / 13644 ツリー ←次へ | 前へ→

【42657】文字列を数値に変換する方法について ぴい 06/9/18(月) 15:35 質問[未読]
【42659】Re:文字列を数値に変換する方法について かみちゃん 06/9/18(月) 15:58 発言[未読]
【42685】Re:文字列を数値に変換する方法について ぴい 06/9/19(火) 12:54 質問[未読]
【42689】Re:文字列を数値に変換する方法について ハチ 06/9/19(火) 14:03 発言[未読]
【42686】Re:文字列を数値に変換する方法について Kein 06/9/19(火) 13:14 回答[未読]
【42712】Re:文字列を数値に変換する方法について Hirofumi 06/9/19(火) 22:20 回答[未読]
【42727】Re:文字列を数値に変換する方法について ぴい 06/9/20(水) 10:24 お礼[未読]

【42657】文字列を数値に変換する方法について
質問  ぴい  - 06/9/18(月) 15:35 -

引用なし
パスワード
   初歩的な質問ですみません。
よろしくお願いいたします。


同じ行(I〜AC列)に下記ア.のように文字列で数字+アルファベットが入力
されています。
これをイのように数値(小数点第一位まで)に置換するにはどうしたらいいでしょうか?
イの行は、数値のほかアルファベットもあります。

よろしくお願いいたします。


ア)  4、 4H、  5、 5H、  6、 6H.... S、M、L....(→文字列)
イ)22.5、23.0、23.5、24.0、24.5、25.0.... S、M、L.... (→文字列+標準)

【42659】Re:文字列を数値に変換する方法について
発言  かみちゃん  - 06/9/18(月) 15:58 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>同じ行(I〜AC列)に下記ア.のように文字列で数字+アルファベットが入力
>されています。
>これをイのように数値(小数点第一位まで)に置換するにはどうしたらいいでしょうか?
>イの行は、数値のほかアルファベットもあります。

変換のパターンを説明してください。
"4"の場合は、4 + 18.5 + 0
"4H"の場合は、4 + 18.5 + 0.5
数字がない場合は、そのままの文字列とする
ということなのでしょうか?

【42685】Re:文字列を数値に変換する方法について
質問  ぴい  - 06/9/19(火) 12:54 -

引用なし
パスワード
   かみちゃん様

説明不足ですみません。
実際置換が必要が必要なのは、With Selection〜Withのサイズのみで、
順番に並んでいます。
そのあと、置換が必要のない、S、M、L、S-M、L-Oなどのサイズが並びます。
(下の順番です)

    4      4H      5      5H      6      6H      7      7H
   8      8H      9      9H      10      F      XS      S
   M      L      O     S-M     L-XL


Range("I2:AC2").NumberFormat = "0.0"
Range("I2:AC2").Value = .Value

のところがよくわからないのですが、表示形式を設定したあと
どうやって数値や数値を貼り付けしたらいいのでしょうか?

よろしくお願いします。

*********************


Range("I2:AC2").NumberFormat = "0.0"
Range("I2:AC2").Value = .Value

 
Worksheets("靴").Range("I2:AC2").Select '---置き換え対象範囲を選択


With Selection
   
   
    .Replace What:="4", Replacement:="22.5", _
         LookAt:=xlWhole    '---完全一致
         
    .Replace What:="4H", Replacement:="23.0", _
         LookAt:=xlWhole

    .Replace What:="5", Replacement:="23.5", _
         LookAt:=xlWhole

    .Replace What:="5H", Replacement:="24.0", _
         LookAt:=xlWhole    '---部分一致
         
    .Replace What:="6", Replacement:="24.5", _
         LookAt:=xlWhole

    .Replace What:="6H", Replacement:="25.0", _
         LookAt:=xlWhole
    
    .Replace What:="7", Replacement:="25.5", _
         LookAt:=xlWhole
  
    .Replace What:="7H", Replacement:="26.0", _
         LookAt:=xlWhole
  
    .Replace What:="8", Replacement:="26.5", _
         LookAt:=xlWhole
         
    .Replace What:="8H", Replacement:="27.0", _
         LookAt:=xlWhole
         
    .Replace What:="9", Replacement:="27.5", _
         LookAt:=xlWhole
         
    .Replace What:="9H", Replacement:="28.0", _
         LookAt:=xlWhole
                  
    .Replace What:="10", Replacement:="28.5", _
         LookAt:=xlWhole
         
    .Replace What:="F", Replacement:="フリー", _
         LookAt:=xlWhole
         
         
  End With


▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>同じ行(I〜AC列)に下記ア.のように文字列で数字+アルファベットが入力
>>されています。
>>これをイのように数値(小数点第一位まで)に置換するにはどうしたらいいでしょうか?
>>イの行は、数値のほかアルファベットもあります。
>
>変換のパターンを説明してください。
>"4"の場合は、4 + 18.5 + 0
>"4H"の場合は、4 + 18.5 + 0.5
>数字がない場合は、そのままの文字列とする
>ということなのでしょうか?

【42686】Re:文字列を数値に変換する方法について
回答  Kein  - 06/9/19(火) 13:14 -

引用なし
パスワード
   置換にこだわるなら、こんな感じでしょう。IV1を作業セルとします。

Sub Rep_Num()
  Range("I2:AC2").Replace "H", ".5"
  With Range("IV1")
   .Value = 18.5
   .Copy
  End With
  Range("I2:AC2").SpecialCells(2, 1).PasteSpecial _
  xlPasteValues, xlPasteSpecialOperationAdd
  Range("IV1").ClearContents
  Application.CutCopyMode = False
End Sub

【42689】Re:文字列を数値に変換する方法について
発言  ハチ  - 06/9/19(火) 14:03 -

引用なし
パスワード
   ▼ぴい さん:

横から失礼します。
Repleceを沢山書くとメンテナンスが大変じゃないですか?

別案でこんな感じでもできると思います。
データ量が多いと遅いかもしれません。
書式もコピーしたいなら
R.Value = Fi.Offset(, 1).Value を変更すればできます。

WorkSheets名"変換表"を追加して
A列に変換元の値、B列に変換後の値を記入していきます。

標準モジュールに下記マクロを入れる。

変換したい範囲を選択した状態で"Find_Test"を実行。


Sub Find_Test()
  Dim R As Range
  Dim Fi As Range
  
  For Each R In Selection.Cells
    Set Fi = Worksheets("変換表").Range("A:A").Find(R.Value, , xlValues, xlWhole)
    If Not Fi Is Nothing Then R.Value = Fi.Offset(, 1).Value
  Next R
  Set Fi = Nothing
End Sub

【42712】Re:文字列を数値に変換する方法について
回答  Hirofumi  - 06/9/19(火) 22:20 -

引用なし
パスワード
   こんなのでも善いかも?

Option Explicit

Public Sub Sample()

  'データの列数(I列〜AC列の21列)
  Const clngColumns As Long = 21
  
  Dim i As Long
  Dim vntData As Variant
  Dim vntUs As Variant
  Dim vntJp As Variant
  
  'USサイズの一覧
  vntUs = Array("4", "4H", "5", "5H", "6", "6H", "7", _
          "7H", "8", "8H", "9", "9H", "10", "F")
  '対応するサイズの一覧
  vntJp = Array("22.5", "23", "23.5", "24", "24.5", "25", "25.5", _
          "26", "26.5", "27", "27.5", "28", "28.5", "フリー")
  
  '範囲を配列に取得
  With Worksheets("靴").Range("I2")
    'データを配列に取得
    vntData = .Resize(, clngColumns).Value
    'USサイズを対応サイズに変換
    For i = 1 To UBound(vntData, 2)
      vntData(1, i) = SizeConv(vntData(1, i), vntUs, vntJp)
    Next i
    '配列をシートに出力
    .Resize(, clngColumns).Value = vntData
  End With
  
  MsgBox "処理が完了しました", vbInformation
  
End Sub

Private Function SizeConv(vntValue As Variant, vntUs As Variant, vntJp As Variant) As Variant

  Dim i As Long
  Dim lngMax As Long
  
  '添え字の最大値
  lngMax = UBound(vntUs)
  
  'USサイズに合致する物が有るか比較
  For i = 0 To lngMax
    '合致した場合Forを抜ける
    If StrComp(vntValue, vntUs(i), vbTextCompare) = 0 Then
      Exit For
    End If
  Next i
  
  '合致した場合
  If i <= lngMax Then
    '対応するサイズを返す
    SizeConv = vntJp(i)
  Else
    '引数を返す
    SizeConv = vntValue
  End If
  
End Function

【42727】Re:文字列を数値に変換する方法について
お礼  ぴい  - 06/9/20(水) 10:24 -

引用なし
パスワード
   Hirofumiさん、みなさん、ありがとうございました。

Hirofumiさんに教えていただいたコードを参考に
うまく動きました!
どうもありがとうございました。


▼Hirofumi さん:
>こんなのでも善いかも?
>
>Option Explicit
>
>Public Sub Sample()
>
>  'データの列数(I列〜AC列の21列)
>  Const clngColumns As Long = 21
>  
>  Dim i As Long
>  Dim vntData As Variant
>  Dim vntUs As Variant
>  Dim vntJp As Variant
>  
>  'USサイズの一覧
>  vntUs = Array("4", "4H", "5", "5H", "6", "6H", "7", _
>          "7H", "8", "8H", "9", "9H", "10", "F")
>  '対応するサイズの一覧
>  vntJp = Array("22.5", "23", "23.5", "24", "24.5", "25", "25.5", _
>          "26", "26.5", "27", "27.5", "28", "28.5", "フリー")
>  
>  '範囲を配列に取得
>  With Worksheets("靴").Range("I2")
>    'データを配列に取得
>    vntData = .Resize(, clngColumns).Value
>    'USサイズを対応サイズに変換
>    For i = 1 To UBound(vntData, 2)
>      vntData(1, i) = SizeConv(vntData(1, i), vntUs, vntJp)
>    Next i
>    '配列をシートに出力
>    .Resize(, clngColumns).Value = vntData
>  End With
>  
>  MsgBox "処理が完了しました", vbInformation
>  
>End Sub
>
>Private Function SizeConv(vntValue As Variant, vntUs As Variant, vntJp As Variant) As Variant
>
>  Dim i As Long
>  Dim lngMax As Long
>  
>  '添え字の最大値
>  lngMax = UBound(vntUs)
>  
>  'USサイズに合致する物が有るか比較
>  For i = 0 To lngMax
>    '合致した場合Forを抜ける
>    If StrComp(vntValue, vntUs(i), vbTextCompare) = 0 Then
>      Exit For
>    End If
>  Next i
>  
>  '合致した場合
>  If i <= lngMax Then
>    '対応するサイズを返す
>    SizeConv = vntJp(i)
>  Else
>    '引数を返す
>    SizeConv = vntValue
>  End If
>  
>End Function

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