アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
エクセルシートの例えばセルB1からB4000まで文字(1-12,1-564等)が入力されていて
その文字を検索値としてVLOOKUPしたいのですが、文字のなかに不要なものが入っている
ため検索できません。関数のTRIMを使えばできるのですが、VBAを使ってやってみたいと
思っています。TRIMを使ってB1からB4000をA1からA4000に入力したいです。
どなたかよろしくお願いします。

質問者からの補足コメント

  • うーん・・・

    データベース
       検索値         A列       B列     C列      D列
    任意の文字を手入力     2-124    2-124 -41468.298 65992.144
                  2-125    2-125 -41466.876 65997.72
                  2-126    2-126 -41464.449 66009.815
    説明不足でしたので再度質問します。
    B列の文字列の中から検索しC列、D列のX座標、Y座標を引っ張って来てある計算をします。
    ところが、B列の文字には目には見えない不要なものが文字の後ろについています。
    そこで、関数TRIMを使ってB列の不要なものを取り除きA列に移したいのですが、データは4000
    行あります。

      補足日時:2023/04/07 14:22
  • うーん・・・

    データベース
       検索値         A列       B列     C列      D列
    任意の文字を手入力     2-124    2-124 -41468.298 65992.144
                  2-125    2-125 -41466.876 65997.72
                  2-126    2-126 -41464.449 66009.815
    説明不足でしたので再度質問します。
    B列の文字列の中から検索しC列、D列のX座標、Y座標を引っ張って来てある計算をします。
    ところが、B列の文字には目には見えない不要なものが文字の後ろについています。
    そこで、関数TRIMを使ってB列の不要なものを取り除きA列に移したいのですが、データは4000
    行あります。

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/04/07 15:23
  • うーん・・・

    B列の文字の後ろにある不要なものを削除したいです。
    よろしくお願いします。

    No.5の回答に寄せられた補足コメントです。 補足日時:2023/04/07 16:04
  • うーん・・・

    お世話になります。
    Option Explicitのところでコンパイルエラーがでました。
    よろしくお願いします。

    No.6の回答に寄せられた補足コメントです。 補足日時:2023/04/07 16:54
  • うーん・・・

    Option Explicitは1行ですけど?

    No.7の回答に寄せられた補足コメントです。 補足日時:2023/04/07 17:24
  • うーん・・・

    お世話になります。
    頂いたコードのみで実行しました。
    すみません、2時間ほど離席します
    良かったらまたお願いします。

    No.8の回答に寄せられた補足コメントです。 補足日時:2023/04/07 17:28
  • うーん・・・

    お世話になります。
    実行できましたが、A列は空白です。
    よろしくお願いします。
    急いでないので来週で結構です。

    No.9の回答に寄せられた補足コメントです。 補足日時:2023/04/07 20:02
  • うーん・・・

    お世話になります。
    朝一からありがとうございます。
    RE.Pattern = "^(\d+-\d+).*" に変えたら、OKでしたが
    文字によっては(157kとか)空白のままでした。
    A列    B列    Ç列    d列
       157K -41139.649 66259.242
    2-151 2-151 -41782.718 65764.719
    2-95    2-95 -41779.504 65769.945
       217K -41163.247 66049.471
    こんな感じです。
    ちなみに、実行するまえはA列は空白です。
    よろしくお願いします。

      補足日時:2023/04/10 09:23
  • うーん・・・

    お世話になります。
    前回の補足説明では、157K-41139.649 66259.242の様にB列、C列、D列の文字が
    くっついているように見えますが、C列、D列はなにも操作はしません。
    出来ればB列の文字がどのようなものでも、不要なものを削除してA列に持っていきたいのですが
    別のキャドからデータを取るときに2-151のようなものだけ取ってくればいまのままで
    大丈夫です。

    A列      B列      C列     D列
         157K     -41139.598    66259.242
    2-251   2-251     -41782.458    65764.719

      補足日時:2023/04/10 10:32
  • うれしい

    お世話になります。
    A列には157Kにしたいです。
    よろしくお願いします。

    No.13の回答に寄せられた補足コメントです。 補足日時:2023/04/10 11:00

A 回答 (15件中1~10件)

すみません。

B列の内容について、勘違いがありました。
(提示されたC列の内容もB列に含まれていると解釈していました)

以下は、単純にB列の内容の両端の空白を削除した結果をA列に設定するマクロです。

前のマクロは破棄してください。
Option Explicit
Public Sub 不要物削除()
Dim i As Long
For i = 1 To 4000
Cells(i, "A") = Trim(Cells(i, "B").Value)
Next
End Sub
    • good
    • 0
この回答へのお礼

tatsumaru77様
バッチリです。
補足説明に罫線を引ければ誤解されなかったと思うのですが
文字と文字の間を空白で開けていましたが、投稿した後は
空白がなくなって157k-46587.458の様になっていました。
すみません、手間を取らせてしまいました。
これで、業務に役立てそうです。
色々とありがとうございました。

お礼日時:2023/04/10 11:35

No1です。



以下、いささか辛口になりますが・・

>VBAを使ってやってみたいと思っています。
普通なら、VBAを作成して自分で実行することを言うと思います。

一方で、やり取りを見ていると、質問者様のなさっていることは「コピペ」と「できない」と書込むことだけ。
他人が作ったものを「使って」みたいということなら、既に、目的は達成できているはずと思います。
(結果は思う通りではなくても、「使ってみる」という目的は達成できている)


曖昧な情報しかないので、正確な回答にならないのだと想像しますけれど・・
>関数のTRIMを使えばできるのですが~~
もしも、これが正しいのなら、TRIMを使えば済むだけの話と思います。

Sub hoge()
For Each c In Range("B1:B4000")
c.Offset(, -1).Value = Trim(c)
Next c
End Sub


徹底して行うのなら、No6様の方法で
RE.Pattern = "[\f\n\r\t\s ]"
として、
For rw = 1 To 4000
Cells(rw, 1).Value = RE.Replace(Cells(rw, 2).Value, "")
Next rw
とでもすればセル内改行や文字間のスペースも取り除けます。



>大変参考になりました、
「無視します」としか読み取れませんね。
    • good
    • 1

上記の例では、B列が157Kですが、この場合、


A列に157と設定したいのでしょうか。それとも157Kと設定したいのでしょうか。(それとも空白のままにしたいのでしょうか?)
この回答への補足あり
    • good
    • 0

>文字によっては(157kとか)空白のままでした。


B列が
157K -41139.649 66259.242
の場合は、
A列に
157K -41139
と設定されることを期待していますか。
それとも、
157-41139
と設定されることを期待していますか。

又、上記例ではKが1文字ですが、
157XYZ -41139.649 66259.242
のように、英字が複数の場合もあるのでしょうか。

又、
XYZ157 -41139.649 66259.242
のように英字が前にある場合もあるのでしょうか。
    • good
    • 0

No9です。


>実行できましたが、A列は空白です。

9行目の
RE.Pattern = "^(\d+-\d+).*$" を
RE.Pattern = "^(\d+-\d+).*" に変えた場合(最後の$をとる)、どうなりますか。

又、
A列の全ての行が空白なのでしょうか。それとも、特定の行のみが空白なのでしょうか。
    • good
    • 0

既出の回答を弄るのはマナー違反とは思いますが。



RE.MultiLine = True '←追加してみる?
RE.Global = True

データ的に打ち込んだと言うより何かから出力された物をコピペされているのかどうか???
    • good
    • 0

念のため、下記URLにアップしました。


https://ideone.com/K5PVkk
前のは破棄して、こちらを使用してください。

添付図のように登録されればOKです。(赤線で囲んだところ)
「vba」の回答画像9
この回答への補足あり
    • good
    • 0

>Option Explicitのところでコンパイルエラーがでました。



もしかして、標準モジュール内に、既にあなたが作った処理があり、
Sub xxxx()
'何かの処理
End Sub
Option Explicit
Public Sub 不要物削除()
・・・

のようになってますか?
その場合は、Option Explicitの行を削除してください。
この回答への補足あり
    • good
    • 0

>Option Explicitのところでコンパイルエラーがでました。



Option Explicit
Option Explicit
Public Sub 不要物削除()

のように、Option Explicitが2行になっていませんか?
Option Explicitは1行だけにしてください。
この回答への補足あり
    • good
    • 0

以下のマクロを標準モジュールに登録してください。


B列から不要分を削除した結果をA列にセットします。

Option Explicit
Public Sub 不要物削除()
Dim i As Long
Dim RE As Object
Dim str As String
Dim matches As Object
Dim submatch As Object
Set RE = CreateObject("VBScript.RegExp")
RE.Pattern = "^(\d+-\d+).*$"
RE.Global = True
For i = 1 To 4000
str = Cells(i, "B").Value
If str <> "" Then
Set matches = RE.Execute(str)
If matches.count > 0 Then
Set submatch = matches.Item(0).submatches
Cells(i, "A").Value = submatch(0)
End If
End If
Next
End Sub
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!