忍者ブログ

OracleDBAの技術メモ

最近物覚えが悪くなったので 仕事中に調べた後々役立つ情報をメモしております。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

空白なのに空白でないセル【事件編】

(タイトルをコナン風にしてみた)

こんな不思議な現象が発生。
ググると一応同じような現象は検索できる。

(1)セルA1は未入力
(2)セルA2は”@”(アットマーク)を入力
(3)セルA3は未入力

(4)セルA1~A3を選択
(5)「現在選択されている範囲を並べ替える」で昇順並べ替えを実施
(6)【結果】”@”(アットマーク)はセルA1へ移動


(7)セルB1に以下の式で長さ0の文字列を入力
  =""
(8)セルB2は”@”(アットマーク)を入力
(9)セルB3は未入力

(10)セルB1~B3を選択
(11)「現在選択されている範囲を並べ替える」で昇順並べ替えを実施
(12)【結果】”@”(アットマーク)は移動せずB2のまま


(13)セルB1を選択してコピー(Ctl+C でも、メニューからでもなんでもよい)
(14)セルC1を選択し右クリック
(15)右クリックメニューから「形式を選択して貼り付け」を選択
(16)ダイアログから”値”を選択して”OK”を押下
(17)セルC2は”@”(アットマーク)を入力
(18)セルC2は未入力

(19)セルC1~C3を選択
(20)「現在選択されている範囲を並べ替える」で昇順並べ替えを実施
(21)【結果】”@”(アットマーク)は移動せずC2のまま


手順だけ読むと当たり前のように見えるが、
C1はExcel上はおろかVBAからオブジェクトとつたって行ってセルのValueプロパティで確認しても何も入っていない。
にも関わらず、ソートをかけると長さ0の文字列が入っているかのような動作となる。

これを意図してやっている場合には問題ないが、
不特定多数の人から送られてくるExcelシートに混入されると実に厄介だ。
ソートをする要件がなければいいが…
PR

ワークシート関数でフルパス+ファイル名からファイル名だけ取り出す

ワークシート関数のみでフルパス+ファイル名からファイル名だけを取り出す方法。

以下の式を入力する。


=MID(A1, FIND("/", SUBSTITUTE(A1, "\", "/", LEN(A1) - LEN(SUBSTITUTE(A1, "\", "")))) + 1, LEN(A1) - FIND("/", SUBSTITUTE(A1, "\", "/", LEN(A1) - LEN(SUBSTITUTE(A1, "\", "")))))


仕組み

簡単に説明すると、文字列中の最後の ”\”(エンマーク) を ”/”(バックスラッシュ) に変換し、
その位置をFINDしてそれより後の文字列を取得する。

SUBSTITUTE関数は最後の引数として[置換対象]を指定できることを利用して、
最後の ”\”(エンマーク) を ”/”(バックスラッシュ) に変換する。

最後の ”\”(エンマーク) は ”\”(エンマーク) の数を数えればよい。
実際には 全文字列長 - 文字列長(文字列中の ”\”(エンマーク) を ””(長さ0の文字列) に変換) で算出する。

後はFINDで ”/”(バックスラッシュ) の位置を取得すればよい。

マイドキュメントフォルダのパスを取得

Excel VBA から「マイドキュメント」フォルダのパスを取得したい場合、
WSHを使用して以下のように取得する。

Dim WSH As Object
Dim sPath As String

    Set WSH = CreateObject("Windows.Shell")

    sPath = WSH.SpecialFolders("MyDocuments")


取得できるWindowsの特殊フォルダは「マイドキュメント」のほかに
    ・デスクトップ("Desktop")
    ・スタートアップ("Startup")
    ・スタートメニュー("StartMenu")

等がある。

詳しくは以下を参照

■MSDN
http://msdn.microsoft.com/ja-jp/library/cc364490.aspx

フォルダを選択するダイアログ

VBAからフォルダを選択させるためのダイアログを表示する方法はいくつかあるが、
FileDIalogオブジェクトを使用する方法が一番使いやすと思われる。
(WSH ”Shell.BrowseForFolder” の方がダイアログの見た目が良いが
 初期パスを渡すと、それ以上の階層が表示されなくなるので使いづらい。)


Sub subTest()

Dim dlgFolder as office.FileDialog
Dim iRes as Integer

    Set dlgFolder = Application.FileDialog(msoFileDialogFolderPicker)
    dlgFolder.AllowMultiSelect = False
    dlgFolder.InitialFileName = "c:\"
    iRes = dlgFolder.Show
    If iRes = -1 then
        msgbox dlgFolder.SelectedItem(1)
    End If

End Sub



ブログ内検索

プロフィール

HN:
宇佐 義男
性別:
男性
自己紹介:
都内で活動中のフリーエンジニア
最近はOracle DBに関する作業が主です。

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

最新CM

[08/06 Apagajid]
[06/23 Ajimehof]
[05/28 ovkftcz]
[05/20 Adeepen]
[05/13 Ajirubuy]

バーコード

P R

忍者アナライズ

免責事項

当ブログは日本オラクル株式会社 及びその子会社、関連会社とは一切関係ありません。 当ブログに記述の内容については、実際とは異なる場合があります。 記載しているコマンド、スクリプトを利用したことによって発生した問題、障害等については一切責任を負いません。 利用は自己責任にてお願い致します。