[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セル内の先頭空白が消えません』(apuro)
お世話になっております。
A〜G列約800行のデータベースで、文字・数値混在のA列を文字列に変換して、ソートを掛けようとしています。
なんとかエラーがかからずにコードを組めたようなのですが、ソート結果が正しく反映されておらず、セル内を確認したところ、どうも表示されない空白部分があることが判りました。
(セル内ダブルクリックしてbackspase→ソートを掛けるとその行は正しい位置に移動しているのを確認、というアナログな確認方法で判明しました)
掲示板内検索でTrim関数を使えば消えると判ったものの、組み込んでみても消えておりません。
Trimの使い方が間違っているのでしょうか?
ご教授宜しくお願い致します。
Private Sub CommandButton1_Click()
Dim i As Long, ir As Long, S As Long Sheets("作業").Select Columns("A:A").Select Selection.ColumnWidth = 15 S = Range("A2").End(xlDown).Row
For i = 1 To S With Cells(i, "A") .NumberFormatLocal = "@" End With Next i Application.Trim (S)
ir = S With ActiveSheet.Sort.SortFields .Clear .Add Key:=Range("A1"), Order:=xlAscending End With With ActiveSheet.Sort .SetRange Range(("A1"), ("G") & ir) .Header = xlYes .Apply End With
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
関数は引数を変化させるものではなく、引数の値を変化させたものをその関数の返値とするもの。 セルの値 = Application.Trim(セルの値) のように使ってみてくれ。 (ねむねむ) 2018/05/21(月) 14:07
早速のご回答ありがとうございます。
当該部分を書き換えて
S = Application.Trim(S)
としてみたのですが、結果が変りません。
「セルの値」の考え方が間違っているのでしょうか?
(apuro) 2018/05/21(月) 14:25
SというのはA列の最下行の行番号ではないのか? (ねむねむ) 2018/05/21(月) 14:41
右端ではなく左端の場合は、left です。 何が表示されるか教えてください。(0d とかではないかと予想)
(???) 2018/05/21(月) 15:01
(@_@)!?
S = Range("A2").End(xlDown).Row
これで、A列選択したつもりになってました。
Dim Si As Range
Set Si = Range(("A2"), ("A") & S)
を追加して、Trim関数に組み込んだところ、ちゃんとソートしてくれました!
ありがとうございました!!!m(__)m
???様
取り敢えず望みの結果は得られたのですが、書き換える前の段階に戻って試してみました。
? hex(asc(left(range("A2"),1)))
36
と出てます。
これで何が判るようになるのでしょうか?
せっかくなので、教えて頂ければ助かります。
宜しくお願い致します。
(apuro) 2018/05/21(月) 15:17
「見えない制御文字」に興味をおぼえて一寸検索してみました。
なんか厄介な奴なんですね。
インポートしたデータを加工する場合、プログラムがいうことを聞いてくれない時は、こういう事態も考えてみないとなのですね。
勉強になりました。
それ以前に、私はコーデイングがまだまだ怪しいので、それで動かない可能性の方が多いんでしょうが(__;
イミディエイトウインドウも、この掲示板ではよく目にしていましたが、実際使ったのは今回初めてなので、もっと利用してみたいと思います。
ありがとうございました。
(apuro) 2018/05/21(月) 16:59
Private Sub CommandButton1_Click()
With Me.Range("A1").CurrentRegion With .Columns("A") .NumberFormatLocal = "@" .Replace " ", "" End With .Sort Key1:=.Range("A1"), Order:=xlAscending, Header:=xlYes End With End Sub
置換機能で消したら、ループしなくていいかも?
(まっつわん) 2018/05/21(月) 17:17
コメントありがとうございます。
自分の組んだコードの半分位短くなってる!?
すごい!!
と、組み込んで走らせてみたんですが・・・
With Me.Range("A1").CurrentRegion
↑の「.Range」で【コンパイルエラー メゾットまたはデータメンバーがみつかりません】となって止まってしまいます。
必要なコードまで消してしまってるんでしょうか?(TT)
Private Sub CommandButton1_Click()
'
Sheets("作業").Select Columns("A:A").Select Selection.ColumnWidth = 15
With Me.Range("A1").CurrentRegion With .Columns("A") .NumberFormatLocal = "@" .Replace " ", "" End With .Sort Key1:=.Range("A1"), Order:=xlAscending, Header:=xlYes End With
End Sub
(apuro) 2018/05/22(火) 17:12
with Sheets("作業") .Columns("A:A").ColumnWidth = 15 with .Range("A1").CurrentRegion
(もこな2) 2018/05/22(火) 19:37
書き直してすっきり!と喜んだのもつかの間、単純に書き換えて頂いたのを置き換えただけでは動かず、ごちゃごちゃ試しておりました。
やっとエラーが出なくなったのですが、今度は肝心の「空白」が消えてくれていません(TT)
軽くなる可能性があるなら、こちらでいきたいのですが、いったい何がいけないのでしょう?
Private Sub CommandButton1_Click()
With Sheets("作業") .Columns("A:A").ColumnWidth = 15 With Range("A1").CurrentRegion With .Columns("A:A") .NumberFormatLocal = "@" .Replace " ", "" End With .Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlYes End With End With End Sub (apuro) 2018/05/25(金) 11:02
今度は肝心の「空白」が消えてくれていません(TT)
.Replace chrw(160), "" では? (seiya) 2018/05/25(金) 11:43
お世話様です。
やはり変化ありません。
chrw(160),ってなにもの?と調べて行ったらCODE関数にたどり着きまして、試しに一つ入れてみました。
結果は「54」と出ます。
ASCIIコードで6ですよね。
当該セルには9桁の数字が入っていますが(視覚的に)左端の数字も「6」です。
…なのですが、そのセルをダブルクリックして、左にカーソルを置いてDELすると確かに何かが消えています。
で、5/21の状況に戻ってしまいます。
この状況は、これ以上変わらないのでしょうか。
んー勿体ない(__;
(apuro) 2018/05/25(金) 14:41
んー勿体ない(__;
折角Withを使っているのに何度も同じことを書かない
1行1行の意味を理解しようとしていますか?
マクロを作れるようになりたいなら、解らないことは聞いて潰しておいてください。
これで大抵のわけのわからない文字列は消えるはず?
Private Sub CommandButton1_Click()
With Me.Range("A1").CurrentRegion With .Columns(1) .ColumnWidth = 15 .NumberFormatLocal = "@" End With With .Columns(.Columns.Count + 1) .Formula = "=TRIM(CLEAN(SUBSTITUTE(A1,CHAR(160),"" "")))" .Offset(, -1 * .Column + 1).Value = .Value .ClearContents End With .Sort Key1:=.Cells(1), Order1:=xlAscending, Header:=xlYes End With End Sub
あれ?もしかしてボタンが配置されているシートは、操作するシートじゃないのかな?
どのシートの操作をしたいかよくわからないけど、MeをSheets("作業")に
変えたらいいかも?
Meって私って意味ですよね?
どのシートのモジュールにコード書いているかわからないけど、
書いたモジュールのオブジェクトが私になります。
Meとあえて書かなくてもエクセル君はわかってくれるけど、
どのシートを操作したいのか、自分に言い聞かせる意味で書いてます。
あと、文字コードの件ですが、
ここにコピペして、人に調べてもらうってのもありかもです。
そういうことが頼めるのが掲示板のいいところだと思います。
(まっつわん) 2018/05/25(金) 15:55
>A〜G列約800行のデータベースで、
試しに、
Private Sub CommandButton1_Click() With Sheets("作業") .Columns("A:A").ColumnWidth = 15 With .Range("A1").CurrentRegion With .Columns("A:A") .NumberFormatLocal = "@" .Value = Application.Clean(.Value) .Replace " ", "" End With .Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlYes End With End With End Sub
(seiya) 2018/05/25(金) 16:58
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.