ACCESS2000のテーブルで文字数制限をすると、全角でも半角でも
1文字と数えられてしまい、困っています。
全角は2文字、半角は1文字として数えたいのです。

モジュールを使い、LENB()、LEFTB()関数を使っても、上記と同様の現象で
解決しません。よい方法はありますでしょうか?

A 回答 (3件)

APIを使う方法もあるかと思いますがもっと単純に・・・


LenB(StrConv("あいうえお", vbFromUnicode))
で10バイトが得られます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
この方法で問題は解決しました。

お礼日時:2001/12/01 15:01

単純に


-------------------------
BOOL WINAPI DllMain(
 HINSTANCE hinstDLL,
 DWORD fwdreason,
 LPVOID lpvReserved)
{
  return 1;
}
export long MyFunctionName(char *buf)
{
 return strlen(buf);
}
-------------------------
をするだけの、何の変哲も無い、只のDLLです。
これをAccessのモジュールから呼び出せばOKです。
    • good
    • 0
この回答へのお礼

親切に教えていただきありがとうございます。
問題を解決することが出来ました。

お礼日時:2001/12/01 15:02

NT系カーネルを使っているOSは内部でUNICODEを使用しているためでは無いでしょうか?



以前、NT4+Access97で試した時は、C言語でDLLを作ってDLL内部でstrlen()でバイトサイズを計ったことがあります。
いまでも有効かどうかは分かりませんが、、、

この回答への補足

ご回答ありがとうございます。
確かに、使用しているOSはWin2000です。
ということは、同じプログラムであっても、OSによって処理が違うということでしょうか?

回答文にかかれている、C言語でDLLを作って、、、、という部分を詳しく教えていただけないでしょうか?どうしてもこの問題を解決する必要があります。

補足日時:2001/11/30 21:52
    • good
    • 0

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

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

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

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

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

Aベストアンサー

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

QAccess2000のクエリで全角文字を半角にするには?

もともとのデータが全角英数字になっているフィールドを半角に変換したいのですが、クエリー実行時に変換できますでしょうか?
文字列関数のASCかな?とも思い、やってみたのですが、うまくいかず、とりあえず元のテーブルのデータを編集を置換でもって半角にしました。
でも、出来ればテーブルのデータは変更したくないので、クエリーでやる方法はありませんでしょうか?
あまり専門的なことは分かりません。VBAは使ったことがありませんのでよろしくお願いします。

Aベストアンサー

StrConv([フィールド名],8)
で半角になります。

詳細はヘルプを参照してください。
全角やカタカナ・ひらがなへの変換もできます。

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アクセスのLENBとエクセルのLENBの違い

アクセスで、定められたバイト数以上の文字を削除したいです。
エクセルでのLENBの考えで、やりたいのですが、それがアクセスでは、うまく認識しません。
例えば、
1234567:エクセルでは、10(半角4と全角3×2)   
      :アクセスでは、14(全てが2バイトにみなされる)
アクセスで、全角半角を区別して、桁数を表示させる関数がありましたら教えてください。
以上、よろしくお願いいたします。

Aベストアンサー

Accessが2000以降ならUNICODEの対応の為です。
下記サポートをお読みください。
http://support.microsoft.com/kb/404928/ja

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

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

Aベストアンサー

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

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

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

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

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

Q半角文字を全角に置き換えたいっっ

アクセステーブル内のデータの中に半角文字が含まれており、これを自動で全角に置換したいのですが、何か簡単に置き換えられる方法はありますでしょうか?
宜しくお願いします。

Aベストアンサー

更新クエリーでStrConvを使う

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]のほか[無変換]でも[カタカナ ひらがな]でも可能です。

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

QAccess 全角英数と半角英数の比較

Access2003, WindowsXP

AccessVBAで以下のような比較を書いていたのですが、こちらの意図と違う動作をしていることに気づきました。

Dim strA as String
Dim strB as String
strA = "123abc" '半角英数
strB = "123abc" '全角英数

If strA = strB then
 Msgbox("strAとstrBは同じです")
Endif

上のコードをそのまま実行すると、strAとstrBは同じであると判断されてしまいます。
こちらの意図としては、比較した2つの変数は「全角英数」と「半角英数」という点で違う値として認識して欲しいのですが、上のような表記方法ではダメなのでしょうか。

正しい比較方法などがあるようでしたら、教えていただきたいです。よろしくお願いします。

Aベストアンサー

[イミディエイト]
? "123abc" = "123abc"
True
? StrConv("123abc", vbFromUnicode)=StrConv("123abc", vbFromUnicode)
False
? StrConv("123abc", vbFromUnicode)=StrConv("123abc", vbFromUnicode)
True
? StrComp("123abc", "123abc", 0)=0
True
? strComp("123abc", "123abc", 0)=0
False

こんな感じで比較します。

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

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

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


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



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



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

Aベストアンサー

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

Qマクロで全角を一括で半角に置換したいです

マクロで下記の作業を行いたいのですがよくわかりません。
アドバイスお願いします。


■作業内容

『Excelでsheetにある全角の文字を一括で半角に置換したい』

※基本的に半角にできるもの(カナ・英数字・記号)は全て半角にしたいのですが、『~』だけは半角にしたくありません。


■画面のイメージ

・sheet1にはマクロを組み込んだボタン画面
・sheet2に全角のデータA
・sheet3にデータAを半角にしたデータA’が返される


■作業イメージ

(1)sheet1のボタンをクリック
(2)sheet2のデータを半角にしてsheet3に返す
(3)『~』を『~』に置換し直す。


すみませんがよろしくお願いいたします。

Aベストアンサー

(2)sheet2のデータを半角にしてsheet3に返す
→sheet2のデータをsheet3にコピペし、その後半角化できるものは半角化する。
(3)『~』を『~』に置換し直す。

というマクロです。

Sub test01()
Sheets("Sheet3").Cells.Clear
With Sheets("Sheet2")
If WorksheetFunction.CountA(.Cells) > 0 Then
.Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).Copy
Else
Exit Sub
End If
End With
With Sheets("Sheet3")
.Range("A1").PasteSpecial
Application.CutCopyMode = False
For Each c In .UsedRange
c.Value = StrConv(c.Value, vbNarrow)
Next
.Cells.Replace What:="~~", Replacement:="~", LookAt:=xlPart
End With
End Sub

(2)sheet2のデータを半角にしてsheet3に返す
→sheet2のデータをsheet3にコピペし、その後半角化できるものは半角化する。
(3)『~』を『~』に置換し直す。

というマクロです。

Sub test01()
Sheets("Sheet3").Cells.Clear
With Sheets("Sheet2")
If WorksheetFunction.CountA(.Cells) > 0 Then
.Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).Copy
Else
Exit Sub
End If
End With
With Sheets("Sheet3")
.Range("A1").PasteSpecial
Applic...続きを読む


人気Q&Aランキング

おすすめ情報