全角のスペースの削除の仕方を教えてください。

例を下に示します。

50桁の変数"name"の中身は"山田 太郎           "です。
変数の中身は、山田 太郎の後ろは全角のスペースが入っています。

名前の後ろの全角のスペースが半角4桁(全角2桁)以上ある場合は、
それ以降を削除したと思っています。

かなり困っています。良い方法をどなたかご伝授下さい。
宜しくお願いします。

A 回答 (5件)

お疲れ様です。



RTrim$()で後ろの空白を削除すればよいのではないでしょうか。

「スペースが半角4桁(全角2桁)以上ある場合」は文字の長さの差で見ては同でしょうか。

余り良い方法ではないかもしれませんが。。。

Option Explicit

Private Sub Form_Load()

  Dim strNAME As String

  strNAME = "山田 太郎           "

  '// 後ろの空白を削除したものと、何Byteの差が有るかを調べる
  If LenB(StrConv(strNAME, vbFromUnicode)) - LenB(StrConv(RTrim$(strNAME), vbFromUnicode)) >= 4 Then

    '// 4Byte以上の差があるので後ろの空白削除
    strNAME = RTrim$(strNAME)

  Else

    '// 4Byteも差がないのでそのまま

  End If

  '// 結果表示
  MsgBox """" & strNAME & """"

End Sub

間違っていたらごめんなさい。
    • good
    • 0
この回答へのお礼

josyo mさんのプログラム通りでずばり出来ました。
ありがとうございます。本当に助かりました m(_ _)m

お礼日時:2001/12/25 16:25

こんにちは、honiyonです。



 一文字ずつ検査していくには、文字列から検査する一文字だけを取りだす必要があります。 文字列からその一部分だけを取り出すには MID$関数を使います。
 以下は具体的な使用例です。

Private Sub Command1_Click()
Dim name As String
name = "山田 太郎"
For i = 1 To Len(name)
MsgBox Mid$(name, i, 1)
Next i
End Sub

 これを実行すると、name変数の内容(あいうえお)を左から順に、一文字ずつ取り出して表示します。

 参考になれば幸いです(..
    • good
    • 0

重複回答ですみません、補足します。



name = "   山田 太郎    "

などの場合で、左側全角スペースを破棄したくない場合は、Trim関数をRTrim関数に置き換えてください。
    • good
    • 0

VB5.0(SP3)での回答とさせていただきます。



簡単に説明させていただくと、一度可変長文字列変数にTrimして代入し、取り出すという方法で処理可能です。

Private Sub TestCode()

Dim name As String * 50
Dim name_work As String

name = "山田 太郎     "
name_work = name
name_work = Trim(name_work)
MsgBox Len(name_work)

End Sub

MsgBox関数にて、5と表示されますので、目的の処理結果になります。
参考になれば幸いです。
    • good
    • 0

こんにちは、honiyonです。



 もし、名字と名前の間のスペースも同様に、「全角2桁以上の場合は全角1桁にする」という処理を適用しても良いのなら簡単です。

 NAME = "山田  太郎      "とする。
 1.SpaceCount変数を用意(整数型)
   最初に 0でリセットしておく。(SpaceCount = 0)
   Answer変数を用意。(文字列型)
   同様に ""でリセット。(Answer = "")
 2.NAME変数の、左から順に1文字ずつ検査していく。
   もし、全角スペースを発見したら、SpaceCountに1を加算する。
   もし、全角スペース以外なら、SpaceCountに0を代入する。
   もし、SpaceCount <= 1なら、現在検査途中の1文字を、Answerに追加する。(SpaceCount > 1の時は追加しない)


 簡単に説明すると、NAME変数の中身を、一文字ずつ Answer変数にコピーしていきます。 その仮定で、全角スペースが2個以上並んでいる時は、最初の一個だけコピーして、次から並んでいる全角スペースはコピーしない、という仕組みです。
 
 参考になれば幸いです(..

この回答への補足

よろしければ、1文字ずつ検索する方法も教えて頂けないでしょうか?
とことん初心者で申し訳ないです。

補足日時:2001/12/25 15:14
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q半角カナを全角カナに変換したい

表題の通りです。
先輩から引き継いだエクセルのデータが、全角カナと半角カナとの両方を、使い分けなどではなく使用しているものだったので、半角カナを全部、全角カナに変換したいと考えています。
置換機能で50音全部を置換するのは大変ですので、一度に変換する良い方法があれば教えてください。
また、全角アルファベットを、普通の英字(半角アルファベット?)にも変換したいと思っています。

Aベストアンサー

=JIS(セル番地)
で全角に
=ASC(セル番地)
で半角になります。

QExcel2010以降でVBA変数名に全角の可否

題名のようなことを考えて、実験的にやってみたのですが、これにまつわる不具合の情報をお持ちでしたら聞かせていただきたいのです。ネット上を漁った限りでは、内部処理がUnicode化されているので問題はないという話と、使えるけどやっちゃダメ的な精神論が出てくる程度で、それが原因でトラブった事例は見かけなかったため、おそらく問題はないだろうと思ってはいるのですが。なおExcel2010より古い環境のことは無視してOKです。

私個人は全角変数名は何となく気味が悪いと思っているくちですが、マクロの引き継ぎを行う必要に迫られ、そこで日本語変数名を使ってみようとしている次第です。特定部署でのみ使用している帳票(印刷するのでデータは50行前後)から、条件に沿ってデータを引っ張ってくるマクロを自作して利用しているのですが、マクロ作者たる私が異動となることとなり、帳票フォーマット変更などのメンテを、残った人員に引き継ぐ必要に迫られています。

部署内に残る人員ではまともにマクロを自作できる者はおらず、かろうじて作られたものを触る程度が可能なくらいです。と言う状況で、残った人員が少しでも修正が容易にできるように、変動要素のあるものは全て定数にしてマクロ先頭に集めたり、しこたまコメントを付けたりはしているのですが、ふと、

「変数名を日本語化したら、入門者には読みやすいのでは?」

と思って実験的にやってみました。こんな感じです。

Const 開始行=10
Dim 終了行 As Long
Dim 行カウンタ As Long

終了行=開始行+30

For 行カウンタ=開始行 To 終了行
(実処理)
Next

これを見て正直なところ、「やべ、俺自身にも解りやすいわwww」って思っちゃいました。これだったら概念説明が非常にやりやすい。動作上も問題ないし、特にやばい話も聞こえてこないなら、このまま行っちゃえと。

なので冒頭でも触れたように、精神論的やっちゃダメ以外の情報を求めます。なお同意意見でもけっこうです。

題名のようなことを考えて、実験的にやってみたのですが、これにまつわる不具合の情報をお持ちでしたら聞かせていただきたいのです。ネット上を漁った限りでは、内部処理がUnicode化されているので問題はないという話と、使えるけどやっちゃダメ的な精神論が出てくる程度で、それが原因でトラブった事例は見かけなかったため、おそらく問題はないだろうと思ってはいるのですが。なおExcel2010より古い環境のことは無視してOKです。

私個人は全角変数名は何となく気味が悪いと思っているくちですが、マクロの引き...続きを読む

Aベストアンサー

苦い経験がありますので、やらないほうがいいです。

Access97のVBAで、変数名に全角を使っていました。Accessのバージョンが上がっても10年以上問題なく使えていました。
Access2007までは、そのまま読み込めていたのですが、Access2010では、全角の変数名を使った部分が欠損して、プログラムが動作しなくなりました。

「銘柄コード」が「銘柄コ」にすべて化けてしまいました。

もともと、全角文字を想定していないシステムですので、このような不備は他の開発環境でもよく見られます。

マイコンの開発環境のMPLAB X IDEを趣味でつかうのですが、これも全角文字が化けることがあります。しかも、特殊な条件の時のみ化けるのでたちが悪いのです。
また、フォルダ名に全角文字が含まれている場合に、パス文字列が化けてちゃんと動作しないこともあります。

Q全角半角変換 C++/CLI

C++/CLI(VC++2008) で
(1)たとえば 東京bay を 東京bay にという風に全角半角混在の文字列のなかの半角文字を全角文字に変換するにはどうすればよろしいでしょうか
(2)全角半角混在の文字列のなかの全角文字を半角文字に変換するにはどうすればよろしいでしょうか
 

Aベストアンサー

1. VBのStrConvを使う。

#using "Microsoft.VisualBasic.dll"
using namespace Microsoft::VisualBasic;

String^ s1 = L"東京bay";
// 全角文字へ
String^ s2 = Strings::StrConv(s1, VbStrConv::Wide, 0);
// 半角文字へ
String^ s3 = Strings::StrConv(s2, VbStrConv::Narrow, 0);


2. Win32 API LCMapStringを使う。

#include "windows.h"
#include "vcclr.h"
#pragma comment(lib, "kernel32.lib")

String^ s1 = L"東京bay";
pin_ptr<const wchar_t> p1 = PtrToStringChars(s1);

array<wchar_t>^ b2 = gcnew array<wchar_t>(s1->Length + 1);
pin_ptr<wchar_t> p2 = &b2[0];
::LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_FULLWIDTH, p1, -1, p2, b2->Length);
String^ s2 = gcnew String(p2);

array<wchar_t>^ b3 = gcnew array<wchar_t>(s1->Length + 1);
pin_ptr<wchar_t> p3 = &b3[0];
::LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_HALFWIDTH, p2, -1, p3, b3->Length);
String^ s3 = gcnew String(p3);

1. VBのStrConvを使う。

#using "Microsoft.VisualBasic.dll"
using namespace Microsoft::VisualBasic;

String^ s1 = L"東京bay";
// 全角文字へ
String^ s2 = Strings::StrConv(s1, VbStrConv::Wide, 0);
// 半角文字へ
String^ s3 = Strings::StrConv(s2, VbStrConv::Narrow, 0);


2. Win32 API LCMapStringを使う。

#include "windows.h"
#include "vcclr.h"
#pragma comment(lib, "kernel32.lib")

String^ s1 = L"東京bay";
pin_ptr<const wchar_t> p1 = PtrToStringChars(s1);

a...続きを読む

Q実行中の変数の中身をイミディエイトに貼り付ける方法

VB6.0を使用しています。
件名のとおりですが、デバッグして変数の中身を見たいときにツールチップに表示されるのですが、最後まで表示されません。イミディエイトに貼り付けてるのを見たことがありますが、方法がわかりません。
どなたか教えてください。

Aベストアンサー

処理を中断している状態で、イミディエイト欄で
?変数名
でEnterしてください。
内容が表示されます。

または、ロジック内に
Debug.Print 変数名
と記述しておくと、その場所を通ったときにイミディエイト欄に書き込まれます。

Qワードで数字の全角を半角に(カタカナは全角のままで)変換するには?

ワードに100ページの文章があります。全角数字が散在しています。全角数字を半角に直したく、半角操作をかけるとカタカナも半角に変換されてしまいます。数字だけ変換されるようにするには、どのようにしたらいいのでしょうか。ワードの、書式メニュー→文字種の変換→半角、で操作をおこないました。

Aベストアンサー

メニューの[編集]→[検索]又は[Ctrl+F]で検索タブが開きます。

[検索する文字列]に[0-9]
(0、9、は全角。[ ]、-、は半角)

[見つかったすべての項目を強調表示する]にチェックを入れます。

[オプション]ボタンを押し[検索オプション]が開きます。
[ワイルドカードを使用する]にチェックを入れると[あいまい検索]のチェックが外れます。

[すべて検索]ボタンを押して、文書の中の全角数字の全てが選択状態になったら、
メニューの[書式]→[文字種の変換]→[半角]を選択します。

Q3桁または4桁の数値を時刻に変換したい

Excel2003でマクロ作成の初心者です。
3桁または4桁の数字を時刻に変更したいです。
  820→8:20  1020→10:20
ネットで捜したら、見つかりましたが、これを実行すると問題点があります。
ア).NumberFormatLocal = "h:mm;@"を使うとエラーがでるので
  実行時エラ-1004
  rangeクラスの NumberFormatLocalプロパティを設定できません。
イ) .Formula = Left(t, 2) & ":" & Right(t, 2)に変更しましたが
   1020はできましたが、820はできません。
   '0820 とするとできます。
  これを「'」をいれなくとも 8:20 のようにしたいです。
ウ)また数値を入力したセルを削除すると即座に
 実行時エラー13 型が一致しません。とでます。
  これを出ないようにしたいのです。
------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim t As String
t = Target.Value
'時間に変換する場所を制限します。
'デフォルトでは「A1」と「C1からD2」に入力した場合のみ処理が実行されます
If Application.Intersect(Target, Range("A1,C1:D2")) Is Nothing Then Exit Sub
'入力された数値が4桁以外の場合ははじかれます。
If Len(t) <> 4 Then Exit Sub
With Target
'セルの書式を時間に設定します。
.NumberFormatLocal = "h:mm;@"
'四桁の数字に「:」を追加します。
'この部分はほかにもいろいろな方法があると思います。ので変えてください。
.Formula = Left(t, 2) & ":" & Right(t, 2)
End With
End Sub

Excel2003でマクロ作成の初心者です。
3桁または4桁の数字を時刻に変更したいです。
  820→8:20  1020→10:20
ネットで捜したら、見つかりましたが、これを実行すると問題点があります。
ア).NumberFormatLocal = "h:mm;@"を使うとエラーがでるので
  実行時エラ-1004
  rangeクラスの NumberFormatLocalプロパティを設定できません。
イ) .Formula = Left(t, 2) & ":" & Right(t, 2)に変更しましたが
   1020はできましたが、820はできません。
   '0820 とするとできます。
  これを「'...続きを読む

Aベストアンサー

表示だけの事なら
書式設定で#0":"00でいいと思います。

あえてマクロにするなら
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Range("A1,C1:D2")) Is Nothing Then Exit Sub
Target.NumberFormatLocal = "#0"":""00"
End Sub

質問者さんのマクロに追加するならば
Private Sub Worksheet_Change(ByVal Target As Range)
Dim t As String
On Error Resume Next (1)
t = Target.Value
If Application.Intersect(Target, Range("A1,C1:D2")) Is Nothing Then Exit Sub
If Len(t) = 3 Then t = "0" & t (2)
If Len(t) = 2 Then t = "00" & t (3)
If Len(t) = 1 Then t = "000" & t (4)
If Len(t) <> 4 Then Exit Sub
With Target
.NumberFormatLocal = "h:mm;@"
.Formula = Left(t, 2) & ":" & Right(t, 2)
End With
End Sub
(1)~(4)を追加します。

表示だけの事なら
書式設定で#0":"00でいいと思います。

あえてマクロにするなら
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Range("A1,C1:D2")) Is Nothing Then Exit Sub
Target.NumberFormatLocal = "#0"":""00"
End Sub

質問者さんのマクロに追加するならば
Private Sub Worksheet_Change(ByVal Target As Range)
Dim t As String
On Error Resume Next (1)
t = Target.Value
If Application.Intersect(Target, Range("A1,C1:D2")) Is Nothing Then Exit ...続きを読む

Qキーボードでの「英数(全角/半角)」変換

 言語変換関係の質問は、「言語バー」「キーボード」関係で、多数あるのですが、どれが自分の探している症状なのか分からないので、新しく質問します。
 PCはSOTECのWV2150Cで、OSはWindowsXPで、ローマ字入力しています。
 キーボードによる、「英字和字」変換と、「英字の全角・半角」変換が、自分の意図しない変換に、どういうわけか、時々変わってしまいます。言語バーをマウスでクリックするのは面倒なので、キーボードで操作したいのですが、それが、コントロール不能になってしまうわけです。
 具体的には、まず「英字の全角」と「和字の全角」の相互変換ですが、うまくいっているときは、通常和字にしているときキーボードの「英数・CapsLock」を押すだけで「英字全角」に変換できます。また押せば、元に戻せます。しかし、何かの拍子で、このキーを押すと、「英字の半角」になってしまい、どうしても「英字の全角」になりません。しかし、時間が経って、いつのまにか、相互変換できるように戻っていることもしばしばです。
 「英字の半角」はキーボード上部の「半角/全角」キーで「英字半角」と「和字全角」とが相互変換できるので、「英数・CapsLock」キーでは、「和字全角」と「英字全角」の相互変換を維持したいわけです。というより、このキーの操作を、どちらも使えるよう、自分でコントロールしたいわけです。
 自分でコントロールするためには、「英数・CapsLock」キーを押すと、何かの拍子で、「英字全角」になったり「英字半角」になったりする、その「何かの拍子」が分かればいいと思うのですが、それが、分かりません。
 PCの種類によって、キーボード操作は違うのかもしれませんが、一つ、よろしくお願いいたします。

 言語変換関係の質問は、「言語バー」「キーボード」関係で、多数あるのですが、どれが自分の探している症状なのか分からないので、新しく質問します。
 PCはSOTECのWV2150Cで、OSはWindowsXPで、ローマ字入力しています。
 キーボードによる、「英字和字」変換と、「英字の全角・半角」変換が、自分の意図しない変換に、どういうわけか、時々変わってしまいます。言語バーをマウスでクリックするのは面倒なので、キーボードで操作したいのですが、それが、コントロール不能になっ...続きを読む

Aベストアンサー

#2です。

質問者さんの使用法なら、必要はないでしょうが、
 >このキーの操作を、どちらも使えるよう、自分でコントロールしたい
ということなので、補足しておきます。

「全角英数」/「半角英数」を基本設定の優先順位と逆のほうにしたいときは、[Caps Lock]の後、[Shift]+[無変換]で行えます。

なお、ご存じかと思いますが、「全(半)角英数」から「ひらがな」に復帰するには、[Caps Lock]のほか[無変換]でも[カタカナ ひらがな]でも可能です。

ひとつ注意が必要なのは、これもご存じかも知れませんが、次の点です。
「全(半)角英数」モードで入力作業をした後、「ひらがな」に復帰することなく、[半角/全角]によって「直接入力」モードにすると、
次に「ひらがな」に復帰しようとしても、[半角/全角]を押したのでは戻れず、「全(半)角英数」になるだけです。
この場合、その上で[Caps Lock]を押せばいいのですが、「直接入力」から[カタカナ ひらがな]を2回押す方法もあります。
とにかく、[半角/全角]を何度押しても行ったり来たりするばかりで、「ひらがな」には戻れません。

御参考までに、次のような操作法も考えられます。
1.「ひらがな」→「全(半)角英数」は[Caps Lock]
2.「ひらがな」→「直接入力」は[半角/全角]
これは当たり前ですね。

3.「全(半)角英数」→「ひらがな」は[カタカナ ひらがな]
4.「直接入力」→「ひらがな」も[カタカナ ひらがな]
 * 1回押して「全(半)角英数」になったときは、続けてもう1回押す。
 (ややこしければ、常に2連打することにしてもよい。)

つまり[半角/全角]や[Caps Lock]をON/OFに使うのではなく、それぞれ一方通行にしておいて、
「ひらがな」に復帰するときはいつも[カタカナ ひらがな]を使うという方法です。

#2です。

質問者さんの使用法なら、必要はないでしょうが、
 >このキーの操作を、どちらも使えるよう、自分でコントロールしたい
ということなので、補足しておきます。

「全角英数」/「半角英数」を基本設定の優先順位と逆のほうにしたいときは、[Caps Lock]の後、[Shift]+[無変換]で行えます。

なお、ご存じかと思いますが、「全(半)角英数」から「ひらがな」に復帰するには、[Caps Lock]のほか[無変換]でも[カタカナ ひらがな]でも可能です。

ひとつ注意が必要なのは、これもご存じかも知れ...続きを読む

Q【VB6】 変数1 = 変数1 Or $H2

他の人が作ったプログラムの修正を行っていたところ、下記のような記述がありました。
このような Or や And の使われ方はどのようなことを意味するのでしょうか?
(gStatusはintegerです。)

記述(1)
gStatus = gs_Status Or &H2

記述(2)
If (gStatus And &H2) = &H2 Then
'処理
End IF


宜しくお願い致します。

Aベストアンサー

&H2は、16進数の「2」をあらわします。
ご質問のケースでは、BIT1の状態を制御、確認しています。
記述(1)
gs_Status のBIT1をONしている。
記述(2)
gs_Status のBIT1がONか、どうか判断している。
(gs_Status をBIT1でマスク(BIT1の情報のみを抽出))し、
BIT1と比較している。
16進数・2進数・論理演算を学習されては?
http://f1.aaa.livedoor.jp/~zahyou/oldvb/ronri.htm
http://www5b.biglobe.ne.jp/~yone-ken/VB/BinHexDec.html
http://www5b.biglobe.ne.jp/~yone-ken/VB/BinHexDec2.html

QALT+半角/全角を押さなければ、文字を変換できません。

PCを立ち上げ、文字を最初に入力しようとすると、英数字で入力されます。

そこで、日本語に変換しようとするのですが、ALT+半角/全角を押さなければ、文字を変換できません。


その後は、半角/全角を押すだけで、変換できるようになります。



一番初めから、半角/全角を押すだけで、変換できるようにするためにはどうすればいいですか?



PC
dell 1525
WindowsVista Home Premium
http://www.sd-dream.com/pasocompass/PC/Dell/Inspiron1525.html

Aベストアンサー

自分の場合は既定の言語を
”日本語(日本)-日本語”から
”日本語(日本)-Microsoft IME”
にしたら半角/全角だけで変換できるようになりました。

QVB6で、変数の値を別ファイルの変数に引き継ぎたい

AというVBのソースファイル(.frm)内に関数の呼び元があり、
その関数がBというファイルにあります。

その関数内で値が設定される変数を、Bファイルのグローバル変数とし、
また、Aファイルのグローバル変数として同じ名前の変数を宣言したとしても、

やはりB内で関数の実行が終了し、Aに戻った際には、変数は別のものとみなされている
ようで、B内関数で設定された値がAファイル内での同名変数に引き継がれません。

どのようにすればよろしいでしょうか?

ご存知の方、お願いします。

Aベストアンサー

>Bファイルのグローバル変数とし、

Bのファイルの拡張子は、.bas 標準ファイルにする
public 宣言で変数を定義

>また、Aファイルのグローバル変数として同じ名前の変数を宣言したとしても

そんなものイラン

そのまま編集を参照すべし


でもさぁ?
そんな、ちんけなコーディングやめて
オブジェクトを定義して、プロパティにて定義すべし
そのくらいやらないと、お給料もらう価値ないぞぉさん!

それが正解とは言わないけど・・・
20年前なら、それで通用したと思うよ


人気Q&Aランキング

おすすめ情報