助けて下さい。

Excelにシートが多数あり、各シートに複数のチェックボックスが作成されています。

(例:□:英語、□:日本語、など)

これらを英語に訳さねばならないのですが、一括で「英語ー>English」「日本語ー>Japanease」と変換する方法はないでしょうか。Excelの検索機能では対象にならないようで、困っています。
宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

フォーム版ならこちらでいかがでしょうか?



Sub チェックボックス置換()
Dim rg As Range, cb As CheckBox
Set rg = Range("A1:A2") 'A1に置換前、A2に置換後の言葉をいれる
For Each cb In ActiveSheet.CheckBoxes
If InStr(cb.Caption, rg(1).Text) Then
cb.Caption = Replace(cb.Caption, rg(1).Text, rg(2).Text)
End If
Next
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます!!やってみます!結果を後ほど必ずアップします!

お礼日時:2017/03/21 10:21

使用されているチェックボックスがActiveXコントロールだという前提です。



マクロ中に、変換前後の文字列を追加(重複禁止)した上で
マクロを実行してください。

チェックボックスのオブジェクト名がCheckBoxXX (XXは数字)でない場合は
「If obj.Name Like "CheckBox*"」の部分を適宜変更してください。



Sub Sample()
  Dim ws As Worksheet
  Dim obj As Object
  Dim dic As Object
  Dim key As Variant

  Set dic = CreateObject("Scripting.Dictionary")

  ' ここに変換前後の文字情報を追加していく
  ' 左側が変換前、右が変換後
  dic("英語") = "English"
  dic("日本語") = "Japanese"

  Application.ScreenUpdating = False
  For Each ws In ThisWorkbook.Worksheets
    ws.Activate
    For Each obj In ActiveSheet.OLEObjects
      If obj.Name Like "CheckBox*" And dic.exists(obj.Object.Caption) Then
        obj.Object.Caption = dic(obj.Object.Caption)
      End If
    Next
  Next
  Application.ScreenUpdating = True
  Set dic = Nothing
  Set obj = Nothing
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます!!やってみます!結果を後ほど必ずアップします!

お礼日時:2017/03/21 10:21

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

このQ&Aを見た人はこんなQ&Aも見ています

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

QEXCELで(□Aー□B)ですが!□の中にAとBを入れたいのですが

EXCELで(□Aー□B)ですが!□の中にAとBを入れたいのですができるのでしょうか?
 図形の□のテキストボックスに文字11ポイントを入力しましが□が大きすぎて()のバランスが
 とても悪いです。
 □の中に入ったA、Bネットで検索しましたが、見当たりませんでした。
  あるサイトのPDFをプリントアウトしました紙面には確かにPDFですがちゃんと□の中にA、Bが入っています。
※ワードの囲い文字の案もあるのですが、それは後で試すとします。
※外字エデタはも後で試します。
 以上ほか何か方法はございませんか!?
以上よろしくお願いいたします。

Aベストアンサー

Office2010より・・・
挿入→テキストボックス→横書きを選択し、テキストボックスを作ります。
「Ctrl」キーを押した状態でテキストボックスの枠の部分をマウスの左ボタンを押したまま適当な場所へずらすとボックスがもう一つコピーされます。
それぞれ「A」「B」をボックス内に入力後、「Shift」キーを押して二つクリック
ボックスの枠の部分で右クリック→「オブジェクトの書式設定」を選択→右メニュー?の「テキストボックス」をクリック→「垂直方向の配置▼」から「中央」を選択し書式設定画面を閉じます。
ボックスの大きさを変更しても常にボックスの中央に文字が配置されます。

Qエクセル:セル「D列」に「○○○(□△□)」とあるとき、( )内を関数で抜き出したい

お願いいたします。
エクセルの「D列」にある( )内の文字だけを関数で抜き出したいのです。
注)そのとき、「( )」は全角半角が混在している可能性があります。


例えば
(1)D1に「○○○(□△□)」とあるとき、
 E1に「□△□」

(2)D2に「○×○(■◎▼)」とあるとき、
 E2に「■◎▼」としたいのです。

(3)また、D列には( )がない場合もあります。たとえば
 D3「◎□△」だけの場合は、
 E3には「(空白)」を返す。

私が一生懸命作ってみると下記の関数になりました。
一応、結果は出ます。
しかし、きっと《もっとシンプルに出来るはず》だと思い、勉強のためにもぜひ、ご教授ください。よろしくお願いいたします。

「=IF(ISERROR(MID(D1,(FIND("(",JIS(D1))+1),((FIND(")",JIS(D1))-(FIND("(",JIS(D1))+1))))),"",MID(D1,(FIND("(",JIS(D1))+1),((FIND(")",JIS(D1))-(FIND("(",JIS(D1))+1)))))」

お願いいたします。
エクセルの「D列」にある( )内の文字だけを関数で抜き出したいのです。
注)そのとき、「( )」は全角半角が混在している可能性があります。


例えば
(1)D1に「○○○(□△□)」とあるとき、
 E1に「□△□」

(2)D2に「○×○(■◎▼)」とあるとき、
 E2に「■◎▼」としたいのです。

(3)また、D列には( )がない場合もあります。たとえば
 D3「◎□△」だけの場合は、
 E3には「(空白)」を返す。

私が一生懸命作ってみると下記の関数になりました。
一応、結果は出ます。
...続きを読む

Aベストアンサー

=MID(LEFT(D1,MIN(FIND({")",")"},D1&"))"))-1),MIN(FIND({"(","("},D1&"(("))+1,LEN(D1))

先頭の"("がない場合は空白を返します。
後方の")"がない場合は、"("以降の文字を返します。
"()"がそろっている場合は()内の文字を返します。

QExcel 年/月/日 時:分:秒の引き算<続>

http://okwave.jp/qa/q7490214.html ←質問者です。

計算は出来るようになったのですが、理屈が理解出来ません。
=NETWORKDAYS(A2,B2,E2:E18)-MOD(A2,1)+MOD(B2,1)-1

MOD関数について調べましたが、A2とB2をそれぞれ1で割った余りを足して、1引くということでしょうか。

どうしても理解できないので、詳細を教えて頂けないでしょうか。

(B2-A2)-((B2-A2)-NETWORKDAYS(A2,B2,E2:E18))
↑こんな式になるのではないかと考えていたような、出来の悪い頭です。
どうか回答の程、宜しくお願い致します。

質問が2つに分かれてしまい、大変申し訳ございません。

Aベストアンサー

シリアル値について理解されていますか?

1日は1
2日なら2
1年(365日)なら365
2年(730日)なら730
半日(12時間)なら0.5
1時間なら1/24
1分なら1/1440

1日と12時間なら1.5

こうなるのがシリアル値です。
そして1900年1月1日0時0分からカウントが始まります。
(オプションで1904年からに変更可能)


これで納得できませんか?

Qエクセルで多数シートの表を1シートにまとめる方法

 エクセルで下記のような表があり、店舗別に100店舗分のシートがあります。それを分類A、B別に1枚のシートにしたいのですが、簡単に作る方法はあるでしょうか。

【店名ア シート】
分類A 個数
商品1 60
商品2 40
商品3 20

分類B
商品4 50
商品5 80
商品6 30

   ↓↓↓

【分類Aシート】         【分類Bシート】
店名ア 商品1 60       店名ア 商品4 50
      商品2 40              商品5 80 
      商品3 20             商品6 30
店名イ 商品1 30       店名イ 商品4 60 
      商品2 10             商品5 40
     商品3 20             商品6 20

Aベストアンサー

簡単に作る方法は思い浮かびませんがプログラムを作って、それにさせれば簡単です。ただ希望に沿ったプログラムに改造するには、ある程度VBAの勉強が必要かも。
プログラムを作る時、次の事項を明確にします。
・あるシートが店舗別シートなのか分類別シートなのかを判定する仕組み
(例)シート名に「店」という文字が含まれていたら店舗別シートとする。
・店舗別シート内のどのセルのデータが分類名を表しているのかを判定する仕組み
(例)分類名の前に「分類:」などを付加して「分類:○○」とインプットされたセルのデータを分類名とする。
この例を適用して作った下記プログラムをVBA標準モジュールに貼付け、マクロ実行を行うと実現できます。貼付方法は参考URLを。
Sub Test()
For Each cm In Sheets
If InStr(cm.Name, "店") = 0 Then
cm.Select
Cells.ClearContents
Range("A1").Value = "店舗名"
Range("B1").Value = "商品名"
Range("C1").Value = "数量"
End If
Next cm
For Each cm In Sheets
If InStr(cm.Name, "店") > 0 Then
cm.Select
rme = Range("A65536").End(xlUp).Row
bunsht = ""
For rm = 1 To rme
bunsht = "分類シート要追加"
If InStr(Cells(rm, 1), "分類:") > 0 Then
bnr = Right(Cells(rm, 1), Len(Cells(rm, 1)) - 3)
For Each cs In Sheets
If cs.Name = bnr Then
Sheets(bnr).Select
rsb = Range("B65536").End(xlUp).Row
Cells(rsb + 1, 1).Value = cm.Name
bunsht = "分類シート既存"
Exit For
End If
Next cs
If bunsht = "分類シート要追加" Then
Sheets.Add before:=Sheets(1)
ActiveSheet.Name = bnr
Sheets(bnr).Range("A2").Value = cm.Name
Sheets(bnr).Range("A1").Value = "店舗名"
Sheets(bnr).Range("B1").Value = "商品名"
Sheets(bnr).Range("C1").Value = "数量"
End If
Else
Sheets(bnr).Select
rsb = Range("B65536").End(xlUp).Row
If cm.Cells(rm, 1) <> "" And cm.Cells(rm, 2) <> "" Then
Cells(rsb + 1, 2).Value = cm.Cells(rm, 1)
Cells(rsb + 1, 3).Value = cm.Cells(rm, 2)
End If
End If
cm.Select
Next rm
End If
Next cm
MsgBox "終了"
End Sub

参考URL:http://excelvba.pc-users.net/fol1/1_1.html

簡単に作る方法は思い浮かびませんがプログラムを作って、それにさせれば簡単です。ただ希望に沿ったプログラムに改造するには、ある程度VBAの勉強が必要かも。
プログラムを作る時、次の事項を明確にします。
・あるシートが店舗別シートなのか分類別シートなのかを判定する仕組み
(例)シート名に「店」という文字が含まれていたら店舗別シートとする。
・店舗別シート内のどのセルのデータが分類名を表しているのかを判定する仕組み
(例)分類名の前に「分類:」などを付加して「分類:○○」とインプット...続きを読む

QExcelを使って読み取った時間(h:m:s)を(h:m:s:1/100)に表示する方法

電気抵抗をマルチメータで読み取ったデータをExcelに落として実験をしていたのですが、、、
時間データが秒までしか表示しなくて困っています。
設定では0.5秒ずつの時間で書き込んでいるはずなのですが、
17時10分50秒
17時10分51秒
17時10分51秒
17時10分51秒
17時10分52秒
17時10分52秒
17時10分53秒
17時10分53秒
17時10分53秒
という間隔で時間が表示されます。
この時間データ(↑)を標準データー(↓)
0.715856481
0.715868056
0.715868056
0.715868056
0.71587963
0.71587963
0.715891204
0.715891204
0.715891204
0.715902778
に変換に変換して、ここからどの様にして、秒の下の位を表示したらよいか検討が付きません。
ご指導の程よろしくお願いします。
長々説明してスミマセン。

Aベストアンサー

こんにちわ。
No.3のe10goです。

No.3で行数が足りないと回答しましたが誤りでした。
下の左の小数点9位までのデータをExcelで取り込むと、右のように小数点秒も表示できます。

0.875196759 = 21:00:17.00
0.875197917 = 21:00:17.10
0.875208333 = 21:00:18.00
0.916876157 = 22:00:18.10
0.958543981 = 23:00:18.20

申し訳ありませんでした。

なお、上の事からも、取り込み前のデータを工夫する必要がありそうです。

お詫びと言っては何ですが、No.4の補足にある質問に回答します。

>エクセルに測定値のデータが10msぐらいの間隔で入ってくるのですが、それをリアルタイム(測定中にグラフにプロットを打つ)様にしたいのですが、それは可能ですか?

エクセルにデータが追加される度に、グラフの系列要素(プロット点等)を自動で増やす方法があります。
日経パソコン2005/10/10号「Excel緊急対策室、自動追尾グラフを作れ」の記事にあった方法で、名前定義と関数を活用します。
内容をそのまま載せると、著作権の問題があるので、カスタマイズして記載します。

まず、シート「Sheet1」に下の例のデータがあり、A2~B5のデータでグラフができているものとします。

(行),「A列」,「B列」
(1),「時間」,「データ」
(2),「21:00:17.00」,「100」
(3),「21:00:17.10」,「102」
(4),「21:00:17.20」,「104」
(5),「21:00:17.30」,「106」

以下に、方法を説明します。
1.
A2を選択し、名前ボックスに「timetop」と入れて、「Enter」
または、A2を選択し、「挿入」メニュー →「名前」→「定義」→
「名前」欄に「timetop」と記入 →「OK」
2.
B2を選択し、名前ボックスに「datatop」と入れて、「Enter」
または、B2を選択し、「挿入」メニュー →「名前」→「定義」→
「名前」欄に「datatop」と記入 →「OK」
3.
「挿入」メニュー →「名前」→「定義」→「名前」欄に「timerange」と記入 →
「参照範囲」欄に「=OFFSET(timetop,0,0,COUNT(Sheet1!B:B))」と記入 →「追加」→
4.
「名前」欄に「datarange」と記入 →「参照範囲」欄に「=OFFSET(datatop,0,0,COUNT(Sheet1!B:B))」と記入 → 
「追加」→「OK」
5.
グラフを選択して、グラフウィザードボタンをクリック
6.
「次へ」ボタン →「グラフの元データ」の「系列」タブの「値」欄に「Sheet1!datarange」と記入 →
「項目軸ラベルに使用」欄に「Sheet1!timerange」と記入 →「完了」

これで、7行以下にデータが増えるとグラフも追加されるようになります。

こんにちわ。
No.3のe10goです。

No.3で行数が足りないと回答しましたが誤りでした。
下の左の小数点9位までのデータをExcelで取り込むと、右のように小数点秒も表示できます。

0.875196759 = 21:00:17.00
0.875197917 = 21:00:17.10
0.875208333 = 21:00:18.00
0.916876157 = 22:00:18.10
0.958543981 = 23:00:18.20

申し訳ありませんでした。

なお、上の事からも、取り込み前のデータを工夫する必要がありそうです。

お詫びと言っては何ですが、No.4の補足にある質問に回答しま...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報