Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


333 / 3841 ページ ←次へ | 前へ→

【75764】Re:VBAでハイパーリンク制御
発言  γ  - 14/7/2(水) 22:55 -

引用なし
パスワード
   >  If TypeName(fname) = "Boolean" Then Exit Sub
のところですが、フォルダを復旧せずに抜けてしまっているので、
修正してください。
・ツリー全体表示

【75763】Re:VBAでハイパーリンク制御
発言  γ  - 14/7/2(水) 21:34 -

引用なし
パスワード
   横から失礼します。

> 画像が保存されているフォルダ(仮に、C:¥画像としてます)を開き、
> その後、手動で画像フォルダに保存した画像を選択すると、
> 任意のセルに、画像のパス名(C:\画像\〇〇.jpg)を表示することは出来ますでしょうか。
のところは、こんな感じでどうですか?

Sub sample()
  Const myFolder As String = "画像のフォルダ名をここに書く"
  Dim fname
  Dim currentfolder As String

  'current folderを退避
  currentfolder = CurDir

  'folderを画像フォルダに変更
  ChDrive myFolder
  ChDir myFolder

  fname = Application.GetOpenFilename("画像 Files (*.jpg), *.jpg")
  If TypeName(fname) = "Boolean" Then Exit Sub
  
  ActiveCell.Value = fname  '★ ActiveCellに画像のファイル名を書き込む

  'current folderを復旧
  ChDrive currentfolder
  ChDir currentfolder
End Sub

★のところですが、まず、ハイパーリンクを張る作業をよく観察して下さい。
その機能で欠けているのか何かをよく考え、
本当に必要な機能だけ追加なり修正なりするように考えてください。

また、マクロの作成には、既にご指摘のとおり、まずマクロ記録をとって、
その意味を調べたりする作業を自分でして下さい。
かなりの部分がそのまま使えたりするはずです。
・ツリー全体表示

【75762】Re:VBAでハイパーリンク制御
発言  カリーニン  - 14/7/2(水) 20:51 -

引用なし
パスワード
   >フォーム上のコマンドボタンを押すことで、
>画像が保存されているフォルダ(仮に、C:¥画像としてます)を開き、

これは↓でいけます。

CreateObject("Shell.Application").ShellExecute "ファイルやフォルダのパス"

>その後、手動で画像フォルダに保存した画像を選択すると、
>任意のセルに、画像のパス名(C:\画像\〇〇.jpg)を表示することは出来ますでしょうか。
>更に欲を言えば、ハイパーリンクに出来ればと考えてます。

これはエクセルの制御の外にありますので不可能だとおもいます。APIを使えば出来るのかもしれませんが
分かりません。
ただ、ダイアログで特定のフォルダ内の特定の拡張子のファイルをユーザーに選択させ、選択したファイル
に対して処理を行う、というのは可能です。

参考HPです。
ht tp://officetanaka.net/excel/vba/file/file02.htm
Sample7の二つ目です。

これと
Sample3
>任意のフォルダを開く

を組み合わせます。

セルにハイパーリンクを埋め込むのはマクロの自動記録が参考になると思います。
・ツリー全体表示

【75761】Re:VBAでハイパーリンク制御
質問  ゆーあ  - 14/7/2(水) 17:22 -

引用なし
パスワード
   カリーニン さん

コメントありがとうございます。
又、説明不足で大変申し訳御座いません。


それに多く望みすぎた気がしますので、
まず質問を絞ります。

フォーム上のコマンドボタンを押すことで、
画像が保存されているフォルダ(仮に、C:¥画像としてます)を開き、
その後、手動で画像フォルダに保存した画像を選択すると、
任意のセルに、画像のパス名(C:\画像\〇〇.jpg)を表示することは出来ますでしょうか。

更に欲を言えば、ハイパーリンクに出来ればと考えてます。
宜しくお願い致します。
・ツリー全体表示

【75760】Re:VBAでハイパーリンク制御
発言  カリーニン  - 14/7/1(火) 20:05 -

引用なし
パスワード
   ちょっと意味がつかみきれてないのですが、ファイルやフォルダを
起動するのは

CreateObject("Shell.Application").ShellExecute "ファイルやフォルダのパス"

でいけます。
画像ファイルを表示するのにアプリケーションをデフォルトのものと違うものを指定する
場合はちょっとコードが違ってきます。
・ツリー全体表示

【75759】VBAでハイパーリンク制御
質問  ゆーあ  - 14/7/1(火) 17:26 -

引用なし
パスワード
   WinXP Excel2000

画像フォーム上に、
  ・画像登録・変更ボタン
  ・リンク先表示ラベル
  ・画像表示ボタン
を設置しており、やりたい事として、

1・画像登録・変更ボタン
   ⇒ボタンを押すと、ハイパーリンク先として、
    画像を入れてあるフォルダを開き、
    任意のセルに登録・変更したい画像のアドレスを登録する

2.リンク先表示ラベル
   ⇒画像登録・変更ボタンで登録した任意のセルを参照し
    ハイパーリンクのアドレスを表示する
   (ハイパーリンク登録されているか確認用)

3.画像表示ボタン
   ⇒画像登録・変更ボタンで登録したハイパーリンク先画像を
    別ウィンドウで表示する

ということを行いたいです。
ヒント等でも構いませんので、どなたかご教授頂ければ幸いで御座います。
宜しくお願い致します。
・ツリー全体表示

【75758】Re:excelからpptへグラフを出力したい
発言  γ  - 14/6/30(月) 21:47 -

引用なし
パスワード
   本サイトの基本方針を今一度読んでくださいね。
してはいけない質問というのがあるでしょ?
・ツリー全体表示

【75757】excelからpptへグラフを出力したい
質問  VBA初心者  - 14/6/29(日) 23:24 -

引用なし
パスワード
   10個のグラフを1つのpptスライドへ出力したいと考えています。
グラフの配置は、下図のようになります。

■:グラフ
________
|■■■|
|■■■|
|■■■|
|■____|

以下のように、変数を定義した場合、どのようにして上図のような配置にすることができますか?
宜しくお願いします。

ループ回数_________________i
パワーポイントの位置_______Top=j
パワーポイントの位置_______Left=k
図の高さ___________________Height=l
図の幅_____________________Width=m
・ツリー全体表示

【75756】Re:Valueと変数の使い方
お礼  芸人  - 14/6/29(日) 16:48 -

引用なし
パスワード
   γ さん、いつも丁寧な解説ありがとうございます。

>ちなみに何という漢字なんでしょう。

数、とか列とか、ワークシート、セル範囲とか
何でもアリみたいなかんじです。わかりやすいんですが
違和感があります。

>i,j,k,l,m,n がいいでしょう。
>  ↑ちなみに、これはintegerの頭2文字の間に入る、と覚えるといいかも。

覚えやすいですね。

> Range(Cells(3, 10), Cells(3, 15)).Value = "→"
> はOKですか?

難しく考えすぎてました。
Range("D5:I5") .Value = "→"
という感じでFor Toは必要なかったですね。
勉強になりました。
・ツリー全体表示

【75755】Re:コード簡略化
お礼  ゆーあ  - 14/6/27(金) 13:40 -

引用なし
パスワード
   カリーニン さん

ありがとうございます!
かなり簡略できました!助かりました!
・ツリー全体表示

【75754】Re:コード簡略化
発言  カリーニン  - 14/6/27(金) 9:54 -

引用なし
パスワード
   こんな感じでいけるのでは?

Dim i As Integer

'中略

 For i = 1 to 100
  Activeworkbook.Worksheets("Sheet2").Cells(ACR,i).Value = フォーム□□.Controls("TextBox" & i).Value
 Next i
・ツリー全体表示

【75753】コード簡略化
質問  ゆーあ  - 14/6/27(金) 9:48 -

引用なし
パスワード
   WinXP Excel2000

フォーム上にあるテキストボックスで、セルの値を表示・入力しており、
連動しているのですが、テキストボックスの数が多いので、
かなりコードが長くなっております。
簡略化コードについて、ご教授宜しくお願い致します。
下記に現コードを示します。


Dim ACR As Long
ActiveWorkbook.Worksheets("Sheet2").Activate
ACR = ActiveCell.Row
If Not フォーム〇〇.Label1.Caption = Empty Then

  Cells(ACR, 1).Value = フォーム□□.テキストボックス1
  Cells(ACR, 2).Value = フォーム□□.テキストボックス2
  Cells(ACR, 3).Value = フォーム□□.テキストボックス3
  Cells(ACR, 4).Value = フォーム□□.テキストボックス4
  Cells(ACR, 5).Value = フォーム□□.テキストボックス5           ・
           ・
           ・
           ・
  Cells(ACR, 100).Value = フォーム□□.テキストボックス100
  
MsgBox "登録・更新しました。"
Else
MsgBox "情報が選択されていません。"
フォーム〇〇.Label1.Caption = Empty
End If
 Worksheets("Sheet1").Select
End Sub
・ツリー全体表示

【75752】Re:Valueと変数の使い方
発言  γ  - 14/6/26(木) 21:22 -

引用なし
パスワード
   コメントは求めておられないと思いますが、ついでに。

> 前回変数にAを使ったのは、私の初心者本ですと変数に漢字が使われているのです。
> さすがに漢字は違和感が強くてためらわれました。
ちなみに何という漢字なんでしょう。

For 列 = n + 5 To m + 3
   Cells(3, 列).Value = "→"
Next 列
とかですか? まあ、それもありますけどね。
i,j,k,l,m,n がいいでしょう。
  ↑ちなみに、これはintegerの頭2文字の間に入る、と覚えるといいかも。

> Range(Cells(3, n + 5), Cells(3, m + 3)).Value = "→"
> ですが変数使ってないのに何でこれでいいいのかわかりませんが
> Rangeについて検索したら初心者には若干ハードルが高いと書かれているサイトがありました。

 Range(Cells(3, 10), Cells(3, 15)).Value = "→"
 はOKですか?
 10のかわりに n + 5 、 15 のかわりに m + 3 と変数n , m を使っていると
 考えればいいでしょう。

 Excelの操作対象は、殆どがRangeに関連するものですから、
 これをマスターすることが必要ですよ。
 ht tp://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html
 などを熟読ください。 
・ツリー全体表示

【75751】Re:エクセルデータからの差し込み印刷
発言  γ  - 14/6/26(木) 20:07 -

引用なし
パスワード
   ▼くろひろ さん:
> ExcelからWordを起動し、差し込み印刷を開始したいのですが、
> 差し込みボタンが表示されません。
基本的な点を教えてください。
1. 単独でWordを開いたら、差し込み印刷が使えるのですか?
2. Excel,Wordのバージョンは?
3. ExcelからWordを起動したい理由は?
  普通、Wordから使いませんか?
・ツリー全体表示

【75750】Re:×を*代わりに使う方法はないでしょう...
お礼  秋田猫  - 14/6/26(木) 20:00 -

引用なし
パスワード
   γ さん

ありがとうございます。
数日の謎が解決できました。ありがとうございます。
とてもたすかりました。
心から感謝いたします。


▼γ さん:
>Sub test()
>  Dim s As String
>  s = Range("A1").Text
>  s = Replace(s, "×", "*")
>  s = Replace(s, "÷", "/")
>  Range("B1").Value = Application.Evaluate(s)
>End Sub
>といった方法でできると思います。
・ツリー全体表示

【75749】エクセルデータからの差し込み印刷
質問  くろひろ  - 14/6/26(木) 14:48 -

引用なし
パスワード
   ExcelからWordを起動し、差し込み印刷を開始したいのですが、差し込みボタンが表示されません。どのようにすれば、可能でしょうか?
・ツリー全体表示

【75748】Re:×を*代わりに使う方法はないでしょう...
発言  γ  - 14/6/26(木) 0:28 -

引用なし
パスワード
   Sub test()
  Dim s As String
  s = Range("A1").Text
  s = Replace(s, "×", "*")
  s = Replace(s, "÷", "/")
  Range("B1").Value = Application.Evaluate(s)
End Sub
といった方法でできると思います。
・ツリー全体表示

【75747】×を*代わりに使う方法はないでしょうか?
質問  秋田猫  - 14/6/25(水) 23:22 -

引用なし
パスワード
   はじめまして、
もし、できる方法があればご教授いただけませんでしょうか?

計算の結果と計算式を別々のセルにあらわさなくてはならなく
二重計算が手間な為
*や/を使わず×や÷を使って計算する方法はないのでしょうか?
もしくは、×に*の性質を持たすことは可能なのでしょうか?


A1  / B1
計算式/答え

○×○÷(○+○)/○


/はセルの区切りのつもりです。

よろしくお願いします。
・ツリー全体表示

【75746】Re:Valueと変数の使い方
お礼  芸人  - 14/6/25(水) 23:12 -

引用なし
パスワード
   γ さん、今回も早くて明瞭で丁寧なアドバイスありがとうございます。
最終的に
Option Explicit

Sub セルへの入力()

Dim n As Integer
Dim m As Integer
n = Cells(3, 21).Value
m = Cells(3, 23).Value

Range(Cells(3, n + 5), Cells(3, m + 3)).Value = "→"

End Sub

としました。
Option ExplicitはSubの次に書いたらプロシージャ内は無効ですと出ました。
Subの前に書かないとダメなんですね。勉強になります。変数宣言されてないというメッセージも確かめました。
前回変数にAを使ったのは、私の初心者本ですと変数に漢字が使われているのです。
さすがに漢字は違和感が強くてためらわれました。

Range(Cells(3, n + 5), Cells(3, m + 3)).Value = "→"

ですが変数使ってないのに何でこれでいいいのかわかりませんが
Rangeについて検索したら初心者には若干ハードルが高いと書かれているサイトがありました。
しかし変数使わずにすむならありがたいので、これを機会に理解していこうと思います。
ありがとうございました。
・ツリー全体表示

【75745】Re:時間表示
お礼  yoyo  - 14/6/25(水) 22:30 -

引用なし
パスワード
   ▼ichinose さん:
>こんばんは。
>
>>エクセルVBAのフォームで時間表示することで
>>つまづいてます。
>>
>>エクセルのセルから値を取得しフォームで下記のように指定してます。
>>nt = Format(nt, "hh:mm")
>>基本、表示できているのですが値が12:00の時だけ
>>思うような表示になりません。
>このntを説明する記述がありませんね!!
>このntが何なのか? の説明をしてくださいね。
>質問者がご自分が分からないところまで閲覧者を導く記述をする
>これ、よい訓練になりますよ!!
>>
>>nt=セルの値
>>セルには12:00と入ってます。セルの書式は[h]:mmで
>>値を取得した時は0.5と表示されます。
>>ここまではいいのですが、nt = Format(nt, "hh:mm")にしたとたん
>>00:05と表示されます。
>>セルの値が12:01の時はちゃんと12:01表示されますが
>>12:00の場合のみの症状です。
>>何か原因があるのでしょうか?
>この現象が発生する場合のntは、
>
>ntがString型の変数
>ユーザーフォームという記述がありますから、
>ntがテキストボックスコントロールの場合などこのような現象が
>おこりますね!!
>
>仮にntが文字列型変数の場合
>
>sub test()
>  dim nt as string
>  nt=range("a1").value 'セルa1に12:00という時刻が入っているとすると
> 'ntは、0.5という文字列が格納されます。0.5という数値ではありません。
> '困ったことに 文字列0.5は、0時5分と解釈してしまいます。よって、
> '記述されたような現象が発生します。ntがテキストボックスの場合も
> '同じです。
> msgbox format(nt,"hh:mm")
>End sub
>セルA1に6:00という時刻が入力されていても同じような現象が発生します
>
>はっきり時刻型に変換してあげましょう
>
>
>sub test2()
>  dim nt as string
>  nt=cdate(range("a1").value)
>  nt=format(nt,"hh:mm")
>  msgbox nt
>end sub


ichinose様
ご回答ありがとうございました。
また、わかりにくい文章で申し訳ありませんでした。
発生していた状況はまさにichinose様の予測通りで
変数はstringで宣言しておりテキストボックスにて発生しておりました。
記載して頂いたように変更すると改善されました。
ありがとうございました。
・ツリー全体表示

333 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free